Cách Lấy Dữ Liệu Từ Các Website Sang Markdown: Một Hướng Dẫn Thực Tế
TL;DR
Việc trích xuất trang web sang Markdown yêu cầu tìm kiếm có giới hạn, thu thập trang chính xác, lựa chọn nội dung chính, chuyển đổi cấu trúc và xác thực.
Bắt đầu với một danh sách URL đã được xem xét; một sơ đồ trang web hoặc bot liên kết nên mở rộng phạm vi chỉ dưới các giới hạn về máy chủ, đường dẫn và trang rõ ràng.
Bảo toàn mã, tiêu đề, liên kết, bảng và siêu dữ liệu nguồn trước khi chia nhỏ tài liệu để tìm kiếm hoặc RAG.
Ví dụ Python dưới đây xử lý một trang tĩnh và giải quyết các liên kết tương đối; nó là một cơ sở, không phải là một công cụ trích xuất bài viết toàn cầu.
Nstdata Crawl là một lựa chọn thu thập được quản lý cho quy trình công việc trang và trang web rộng hơn, trong khi việc kiểm tra độ trung thực ở hạ nguồn vẫn cần thiết.
Những gì một quy trình chuyển đổi website sang Markdown đáng tin cậy sản xuất
Một quy trình chuyển đổi website sang Markdown đáng tin cậy sản xuất một tài liệu trung thực cộng với đủ siêu dữ liệu để truy tìm tài liệu đó đến một quan sát nguồn. Một tệp văn bản chứa nội dung trang đã được làm phẳng không tự động phù hợp cho việc truy xuất. Điều hướng có thể làm cho các đoạn văn hữu ích bị quá tải, một thanh bên bị loại bỏ có thể xóa một cảnh báo, và một liên kết tương đối bị hỏng có thể khiến việc trích dẫn kết quả trở nên vô dụng.
Định nghĩa người tiêu dùng trước. Một chỉ mục tài liệu cần các đường dẫn tiêu đề và ví dụ mã. Một tập hợp nghiên cứu cần những tuyên bố có thể quy về và liên kết. Một quy trình phân tích sản phẩm có thể yêu cầu các trường có cấu trúc cùng với Markdown. Tổng quan URL-to-Markdown giải thích vai trò của định dạng; phần thực thi bên dưới tập trung vào việc giữ nguyên ý nghĩa thay vì tối đa hóa đầu ra ký tự.
Chuỗi hoàn chỉnh là URL đã được phê duyệt → lấy → phân loại → chọn nội dung → chuyển đổi → xác thực → lưu trữ → làm mới. Mỗi mũi tên là một ranh giới thất bại. Nstdata Crawl có thể hỗ trợ việc thu thập và chuyển đổi, nhưng ứng dụng vẫn phải quyết định xem tài liệu kết quả có đáp ứng hợp đồng của nó hay không.
Trải nghiệm Nstproxy Crawl - Bắt Đầu Dùng Thử Miễn Phí Hôm Nay
Phương pháp địa phương yêu cầu Python, một khách hàng HTTP, một trình phân tích HTML, và một bộ chuyển đổi Markdown. Sử dụng các trang công cộng mà bạn được phép xử lý và kiểm tra cấu trúc của chúng trước khi mở rộng công việc. Ví dụ sử dụng trang trình diễn công khai tại example.com và không yêu cầu thông tin xác thực dịch vụ trả phí.
Chọn các trang đại diện với các đoạn văn, liên kết nội tuyến, một bảng, mã và một ghi chú có ý nghĩa. Chấp nhận nên yêu cầu bảo toàn các tiêu đề quan trọng, nội dung mở đầu và kết thúc, các trích dẫn chính, và mã thiết yếu. Một số lượng ký tự tối thiểu sẽ bắt được sự trống trải rõ ràng; nó không chứng minh tính chính xác.
Đối với một công việc trên toàn bộ trang web, định nghĩa các máy chủ được phép, tiền tố đường dẫn, tham số truy vấn liên quan, số trang tối đa và tần suất xem lại. Loại trừ các đường dẫn tài khoản, giỏ hàng, tìm kiếm, và bộ lọc trùng lặp trừ khi chúng được yêu cầu rõ ràng. Hướng dẫn thu thập website có giới hạn cung cấp tài liệu khám phá cho quy trình chuyển đổi này.
Hướng dẫn chi tiết
Hướng dẫn bắt đầu với một bộ chuyển đổi một trang có thể kiểm tra và sau đó thêm các điều khiển cần thiết cho nhiều trang. Giữ mẫu chấp nhận một trang có sẵn khi bộ sưu tập phát triển.
Phương pháp 1: Chuyển đổi HTML tĩnh tại chỗ
Bước 1: Cài đặt các phụ thuộc phân tích
Cài đặt ba thư viện trong một môi trường ảo cụ thể cho dự án.
Hướng dẫn nhanh HTTPX là tài liệu tham khảo cho xử lý yêu cầu và phản hồi. Dự án markdownify tài liệu hành vi và các tùy chọn chuyển đổi. Ghi rõ các phiên bản sau khi xác thực mẫu của bạn thay vì giả định rằng một bản phát hành bộ chuyển đổi trong tương lai sẽ bảo toàn mọi chi tiết đầu ra.
Bước 2: Lấy và chuyển đổi một trang đã được phê duyệt
Chức năng sau kiểm tra sơ đồ, đặt thời gian chờ, xác thực loại phản hồi, loại bỏ các phần tử không phải nội dung thường gặp bên trong container được chọn, và giải quyết các điểm đến liên kết. Lưu nó dưới dạng page_to_markdown.py và thực thi nó bằng Python.
from datetime import datetime, timezone
from hashlib import sha256
from urllib.parse import urljoin, urlparse
import httpx
from bs4 import BeautifulSoup
from markdownify import markdownify
defpage_to_markdown(url:str)->dict:if urlparse(url).scheme notin{"http","https"}:raise ValueError("Expected an approved HTTP(S) page URL")with httpx.Client( timeout=20, follow_redirects=True, headers={"User-Agent":"MarkdownResearchExample/1.0"},)as client: response = client.get(url) response.raise_for_status()if"text/html"notin response.headers.get("content-type","").lower():raise ValueError("Response is not HTML") soup = BeautifulSoup(response.text,"html.parser") title = soup.title.get_text(" ", strip=True)if soup.title else""root = soup.select_one("main")or soup.select_one("article")or soup.body
if root isNone:raise ValueError("Không có bộ chứa nội dung ứng cử viên") base_url =str(response.url) base_tag = soup.find("base", href=True)if base_tag: candidate = urljoin(base_url, base_tag["href"])if urlparse(candidate).scheme in{"http","https"}: base_url = candidate
for node in root.select("script, style, nav, footer"): node.decompose()for node in root.select("a[href], img[src]"): attribute ="href"if node.name =="a"else"src" node[attribute]= urljoin(base_url, node[attribute]) content = markdownify(str(root), heading_style="ATX").strip()ifnot content:raise ValueError("Đầu ra Markdown trống")return{"source_url": url,"final_url":str(response.url),"title": title,"fetched_at": datetime.now(timezone.utc).isoformat(),"representation":"source_html","extractor_version":"example-v1","content_hash": sha256(content.encode("utf-8")).hexdigest(),"markdown": content,}if __name__ =="__main__": result = page_to_markdown("https://example.com/")print(result["title"])print(result["markdown"])
Đường cơ sở này yêu cầu một URL trình diễn công khai được kiểm soát. Đây không phải là một điểm cuối lấy URL công khai: việc chấp nhận đầu vào tùy ý của người dùng sẽ yêu cầu các hạn chế về mạng, xác thực máy chủ và chuyển hướng, và bảo vệ chống lại các yêu cầu mạng nội bộ. Đối với một dự án có kiểm soát, hãy cung cấp một danh sách đã được phê duyệt thay vì phơi bày chức năng này trực tiếp cho người lạ.
Bước 3: Thay thế bộ chọn rộng bằng quy tắc đã được xem xét
Chiến lược dự phòng main → article → body là một chiến lược lựa chọn ứng cử viên, không phải là tuyên bố rằng phần tử phù hợp đầu tiên luôn là tài liệu đúng. Kiểm tra nguồn của bạn và chọn một bộ bao ổn định khi một cái tồn tại. Một body đầy đủ có thể bao gồm các khuyến nghị, văn bản cookie, và các bản xem trước bài viết bị trùng.
Mã này cố ý giữ lại các yếu tố aside. Trên các trang kỹ thuật, một aside có thể chứa cảnh báo. Việc xóa tất cả các aside tạo ra một tệp sạch hơn trong khi thay đổi ý nghĩa của các hướng dẫn. Tương tự, văn bản alt hình ảnh có ý nghĩa hoặc liên kết có thể đáng được bảo tồn ngay cả khi hình ảnh trang trí có thể bị bỏ qua.
Kiểm tra chuyển đổi trên một trang với mã mã hóa và một bảng phức tạp. Nếu một bảng mất mối quan hệ của nó, hãy bảo tồn một đại diện phong phú hơn hoặc thêm một chuyển đổi cụ thể theo nguồn đã được xem xét. Không gán nhãn mọi tệp Markdown cú pháp hợp lệ được chấp nhận.
Bước 4: Lưu trữ nguồn gốc bên cạnh tài liệu
Viết Markdown và siêu dữ liệu cùng một lúc hoặc lưu chúng như một bản ghi đã được phiên bản hóa. Giữ URL đã gửi và cuối, thời gian quan sát, đại diện, phiên bản trích xuất, và băm nội dung. Một danh tính lưu trữ ổn định không nên chỉ dựa vào một tên tệp dễ va chạm được lấy từ một URL dài.
Băm mô tả nội dung đã chuyển đổi, không phải phản hồi thô. Thay đổi bộ phân tích cú pháp có thể thay đổi băm mà không cần chỉnh sửa nguồn. Bảo tồn phiên bản trích xuất để logic làm mới có thể phân biệt những sự kiện đó. Lưu một hiện vật nguồn được phép khi chính sách giữ lại của nhiệm vụ hỗ trợ việc phát lại các sửa chữa.
Phương pháp 2: Sử dụng thu hoạch trang và trang web được quản lý
Thu hoạch được quản lý là phù hợp khi dự án phải xử lý nhiều loại trang hoặc duy trì một bộ sưu tập trang được giới hạn mà không sở hữu tất cả các thành phần lấy và hiển thị. Nstdata Crawl là một ứng cử viên cho vai trò đó. Bắt đầu từ bề mặt sản phẩm hiện tại hoặc Playground và kiểm tra chính xác các trang và định dạng yêu cầu. Sử dụng ví dụ hiện tại được tạo ra thay vì sao chép một trường API không được xác minh từ một bài viết bên thứ ba. Một con đường được quản lý thay đổi quyền sở hữu thu hoạch, trong khi phân loại nội dung và chấp nhận vẫn là trách nhiệm của ứng dụng.
Bước 1: Chọn một công việc Nstdata Crawl được giới hạn
Đặt số lượng trang, độ sâu, và ranh giới bao gồm hoặc loại trừ trước khi gửi một công việc trang. Một trang nhập liệu tài liệu có thể dẫn đến lưu trữ, bản sao địa phương, ví dụ, và tham chiếu bên ngoài. Chỉ nhận bộ nguồn mà cơ sở kiến thức nhằm mục đích bao phủ.
Bề mặt sản phẩm Nstdata Crawl hiện tại tài liệu sưu tập trang và tùy chọn đầu ra trang. Kiểm tra Markdown trên các trang đại diện, và giữ lại một hiện vật thay thế nơi nó giúp chẩn đoán nội dung thiếu.
Bước 2: Giữ các điều khiển thu hoạch rõ ràng
Sử dụng kết xuất khi HTML nguồn thiếu văn bản yêu cầu, không tự động cho mọi trang. So sánh phản hồi ban đầu với nội dung hiển thị trước khi chọn con đường. Đối với các trang đã được kết xuất, sự hoàn thành nên phụ thuộc vào một tín hiệu cụ thể về nội dung thay vì một độ trễ tùy ý.
Ghi lại cấu hình công việc và kết quả cấp trang. Một công việc được chấp nhận không giống như tất cả các trang đều hợp lệ. Giữ các trang không thành công, bị giới hạn, không khả dụng, và đã chấp nhận có thể phân biệt.
Bước 3: Đánh giá chi phí vận hành hoàn chỉnh
Tham khảo mô hình giá Crawl hiện tại, bao gồm bất kỳ việc sử dụng proxy tính phí riêng, thay vì suy ra chi phí từ một mức giá tiêu đề sao chép. Đếm các trang đáp ứng tiêu chí chấp nhận tài liệu. Thêm lưu trữ, xử lý hạ nguồn và nỗ lực xem xét khi so sánh với việc trích xuất địa phương.
Yêu cầu Nstdata có trả phí yêu cầu một tài khoản và thông tin xác thực. Bài viết này báo cáo đường dẫn Python cục bộ, không phải là điểm chuẩn dịch vụ được quản lý xác thực. Tạo và thực thi ví dụ cụ thể cho tài khoản hiện tại trước khi dựa vào lộ trình quản lý trong sản xuất.
Từ một vài tài liệu đến một bộ tài liệu được duy trì
Một bộ tài liệu được duy trì cần có chính sách làm mới và loại bỏ ngoài việc chuyển đổi ban đầu. Bắt đầu từ danh sách URL đã được xem xét, sau đó thêm phát hiện sitemap hoặc duyệt giới hạn khi trường hợp sử dụng yêu cầu. Làm cho việc ghi dữ liệu là phi tuyến tính, theo dõi danh tính trang qua các chuyển hướng, và tách biệt các thử lại lấy dữ liệu khỏi các thất bại về chất lượng nội dung.
Một băm thay đổi có thể phản ánh một chỉnh sửa quan trọng hoặc một widget quay vòng. So sánh sự khác biệt nội dung chính trước khi lập chỉ mục lại. Giữ các trang địa phương hóa và các biến thể sản phẩm tách biệt khi nội dung của chúng quan trọng. Tránh việc loại bỏ chuỗi truy vấn một cách bừa bãi, điều này có thể xóa bỏ những khác biệt có nghĩa nguồn gốc.
Để truy xuất, xác thực tài liệu đầy đủ trước khi chia nhỏ nó. Hướng dẫn nhập liệu RAG giải thích vai trò hạ nguồn, trong khi tổng quan các chiến lược chia nhỏ giúp bảo tồn ngữ cảnh tiêu đề. Các đoạn nên kế thừa URL, tiêu đề, đường dẫn tiêu đề, phiên bản nguồn và thời gian quan sát.
Khắc phục sự cố và xử lý nguồn một cách có trách nhiệm
Khắc phục sự cố bắt đầu bằng cách phân loại trang đã nhận. Một đầu ra gần như trống có thể đến từ một shell ứng dụng, hạn chế truy cập, chuyển hướng, hoặc tài liệu thực sự ngắn. Một đầu ra dài có thể vẫn là điều hướng chứ không phải nội dung. Kiểm tra phản hồi và container đã chọn trước khi thay đổi bộ chuyển đổi.
Văn bản giới thiệu lặp lại trong nhiều tệp gợi ý sự rò rỉ mẫu. Thiếu các đoạn kết thúc gợi ý một bao bọc chưa hoàn chỉnh hoặc phần được tải muộn. Liên kết hỏng gợi ý độ chính xác cơ sở không đúng. Lỗi thụt lề mã không đúng yêu cầu so sánh với nguồn thay vì một ngưỡng số lượng ký tự.
Sử dụng các nguồn được ủy quyền, tôn trọng các hướng dẫn và điều khoản truy cập hiện hành, và chỉ giữ lại những gì mà mục đích yêu cầu. Giao thức Loại trừ Robot định nghĩa một tín hiệu truy cập có thể đọc được bởi máy; nó không giải quyết tất cả quyền để giữ lại, phân phối lại, hoặc đào tạo trên nội dung. Phát tán các điều chỉnh và loại bỏ liên quan vào tài liệu lưu trữ, chỉ mục, và bộ nhớ cache.
Kết luận
Lấy dữ liệu từ các trang web sang Markdown là một nhiệm vụ giữ gìn tính toàn vẹn nguồn trước khi trở thành một nhiệm vụ định dạng. Bắt đầu với một trang đã được phê duyệt, thiết lập tiêu chí chấp nhận, và bảo tồn nguồn gốc trước khi mở rộng việc phát hiện hoặc lập chỉ mục. So sánh việc phân tích địa phương với Nstdata Crawl trên cùng các tài liệu đại diện. Đối với một hệ thống thu thập nhiều nguồn hiện có, Nstdata Proxy Manager là một tùy chọn bổ sung khi các hoạt động proxy tập trung trở thành yêu cầu riêng biệt.
Đánh giá bước thu thập Markdown
Kiểm tra Nstdata Crawl trên một bộ nguồn hạn chế và so sánh các tiêu đề, liên kết, mã và các thất bại ở cấp độ trang quan trọng.
Hỏi: Một yêu cầu có thể chuyển đổi toàn bộ một trang web không?
Một yêu cầu trang chuyển đổi một phản hồi. Một quy trình làm việc trên toàn bộ trang cũng cần phát hiện, xử lý từng trang, phạm vi giới hạn, lưu trữ, và theo dõi hoàn thành.
Hỏi: Mỗi trang có cần phải render JavaScript không?
Không. Kiểm tra phản hồi ban đầu trước và chỉ render khi nội dung cần thiết vắng mặt và một lộ trình render được ủy quyền là phù hợp.
Hỏi: Ví dụ Python có phải là một trình trích xuất bài viết toàn cầu không?
Không. Bộ chọn nội dung của nó là một cơ sở. Xem xét các bao bọc cụ thể cho nguồn và các cấu trúc trang quan trọng trước khi tăng khối lượng.
Hỏi: Tại sao nên bảo tồn siêu dữ liệu bên ngoài Markdown?
Siêu dữ liệu xác định quan sát nguồn và phiên bản trích xuất, cho phép trích dẫn, quyết định làm mới, gỡ lỗi, và phát lại mà không làm rối văn bản tài liệu.
Hỏi: Markdown có luôn là định dạng RAG tốt nhất không?
Không. Markdown tiện lợi khi nó giữ nguyên cấu trúc cần thiết. Các bảng phức tạp, sơ đồ, hoặc tài liệu nhạy cảm về bố cục có thể cần một đại diện phong phú hơn.
Hỏi: Ví dụ cục bộ có chạy mà không cần khóa API trả phí không?
Có. Ví dụ về trang tĩnh sử dụng thư viện cục bộ và một trang trình diễn công khai. Các yêu cầu dịch vụ được quản lý cần tài khoản và thông tin đăng nhập thích hợp.
Lena Zhou
Oct. 13th 2026
Thu thập toàn bộ trang web chỉ với một yêu cầu API
Tỷ lệ thành công 99,8% với kết xuất JavaScript
Nhận dữ liệu sạch, sẵn sàng cho LLM ở nhiều định dạng
Chuyển mọi trang web thành Markdown, HTML, JSON, liên kết, PDF và hơn thế nữa mà không cần quản lý hạ tầng thu thập dữ liệu.