MarkItDown Web Scraping: Chuyển đổi Trang thành Markdown sẵn sàng cho LLM
Advanced Data Extraction Specialist
TL;DR:
- MarkItDown chuyển đổi một trang HTML được trích xuất thành Markdown, giữ nguyên các tiêu đề, liên kết và danh sách mà một mô hình ngôn ngữ đọc tốt.
- Việc trích xuất cung cấp cho bạn HTML trong bộ nhớ, vì vậy hướng dẫn sử dụng
convert_streamvới mộtBytesIOvà phần mở rộng rõ ràng là.htmlthay vì đường dẫn tệp. - MarkItDown không có lớp truy xuất để xóa các khối, vì vậy Scrapeless lấy trang và MarkItDown chuyển đổi nó.
- Trên trang ví dụ, 11.021 ký tự HTML trở thành 2.973 ký tự Markdown với một tiêu đề thực sự.
- MarkItDown chuyển đổi toàn bộ tài liệu thành Markdown có cấu trúc; chọn trafilatura thay vào đó khi bạn chỉ muốn bài viết chính với các phần không cần thiết đã được loại bỏ.
- Bắt đầu với kế hoạch miễn phí của Scrapeless và chuyển đổi trang đầu tiên của bạn.
Mô hình ngôn ngữ đọc Markdown tốt hơn HTML thô. Markdown mang cấu trúc mà một mô hình cần, các tiêu đề, danh sách và liên kết, mà không có các thẻ lộn xộn, khối mã và kiểu nội tuyến làm đầy một trang HTML. MarkItDown, công cụ chuyển đổi tài liệu thành Markdown của Microsoft, thực hiện chuyển đổi đó, và nó xử lý HTML, PDF, tài liệu Office và nhiều thứ khác thông qua một giao diện duy nhất. Điều nó không làm là lấy trang, mà đó là một phần của quy trình trích xuất phải cung cấp.
Hướng dẫn này kết hợp hai điều đó. Scrapeless Universal Scraping API lấy trang, và MarkItDown chuyển đổi HTML trả về thành Markdown. Mỗi số liệu bên dưới đều đến từ một lần thực thi thực tế trên một trang công cộng.
MarkItDown Làm Gì
MarkItDown nhận tài liệu và trả về Markdown. Lý do tồn tại của nó là đầu vào LLM: nó sản xuất văn bản giữ cấu trúc ở dạng token hiệu quả, theo tiêu chuẩn CommonMark được triển khai rộng rãi cho Markdown mà nó xuất ra. Kho lưu trữ MarkItDown liệt kê các định dạng đầu vào mà nó chấp nhận, bao gồm HTML, PDF, Word, PowerPoint và hình ảnh.
Điều MarkItDown không làm là trích xuất. Nó không có trình duyệt và không có cách nào để vượt qua thử thách truy cập, vì vậy nó chuyển đổi bất kỳ byte nào mà bạn đưa cho nó. Lấy những byte đó từ một trang sống, đôi khi được bảo vệ là một công việc riêng biệt.
Cài Đặt
MarkItDown là một cài đặt pip đơn lẻ.
bash
pip install markitdown
Đặt khóa Scrapeless của bạn trong shell. Sử dụng khóa thực tế tại thời điểm chạy và giữ phần placeholder ra khỏi mã nguồn của bạn.
bash
export SCRAPELESS_API_KEY="sk_your_key_here"
Chuyển Đổi HTML Được Trích Xuất Sang Markdown
Trích xuất trả về một chuỗi HTML, không phải là tệp, vì vậy điểm vào đúng là convert_stream. Bọc HTML trong một BytesIO và truyền file_extension=".html" để MarkItDown phân tích nó như HTML. Markdown đã chuyển đổi có trong text_content của kết quả.
python
import io
import json
import os
import urllib.request
from markitdown import MarkItDown
API_URL = "https://api.scrapeless.com/api/v2/unlocker/request"
TARGET = "https://quotes.toscrape.com/"
def fetch_html(url: str) -> str:
payload = json.dumps(
{"actor": "unlocker.webunlocker", "input": {"url": url, "js_render": False, "headless": False}}
).encode()
request = urllib.request.Request(
API_URL,
data=payload,
headers={"x-api-token": os.environ["SCRAPELESS_API_KEY"], "Content-Type": "application/json"},
method="POST",
)
with urllib.request.urlopen(request, timeout=90) as response:
return json.loads(response.read())["data"]
html = fetch_html(TARGET)
result = MarkItDown().convert_stream(io.BytesIO(html.encode("utf-8")), file_extension=".html")
markdown = result.text_content
print(f"raw html chars: {len(html)}")
print(f"markdown chars: {len(markdown)}")
print(f"starts with heading: {markdown.lstrip().startswith('#')}")
print("--- first lines of markdown ---")
for line in [line for line in markdown.splitlines() if line.strip()][:4]:
print(line)
Chạy báo cáo kích thước và in phần đầu của Markdown.
text
raw html chars: 11021
markdown chars: 2973
starts with heading: True
--- first lines of markdown ---
# [Quotes to Scrape](/)
[Login](/login)
“The world as we have created it is a process of our thinking. It cannot be changed without changing our thinking.”
by Albert Einstein
Đầu ra mở ra với một tiêu đề Markdown thực sự và một liên kết, và câu trích dẫn đầu tiên của trang theo sau. Cấu trúc mà mô hình có thể sử dụng vẫn tồn tại sau khi chuyển đổi, và 11.021 ký tự HTML giảm xuống còn 2.973 ký tự Markdown.
Tại Sao Markdown cho LLM
Markdown là định dạng mà hầu hết các mô hình ngôn ngữ được đào tạo để đọc, vì vậy tiêu đề trở thành các phần, liên kết vẫn dễ đọc, và danh sách vẫn là danh sách, tất cả đều sử dụng ít mã hơn so với HTML gốc. Truyền HTML thô thay vào đó sẽ tiêu tốn mã cho các thẻ và kiểu inline mà mô hình phải vượt qua, và nó chôn vùi cấu trúc giúp mô hình tổ chức nội dung. Chuyển đổi sang Markdown trước là một bước tiết kiệm mà được lợi trong mọi cuộc gọi phía sau.
Nơi MarkItDown Dừng Lại
MarkItDown chuyển đổi; nó không lấy dữ liệu qua một khối, đó là lý do tại sao hướng dẫn này ghép nó với một công cụ truy xuất. Đưa HTML từ một trang bảo vệ mà được lấy bằng một client đơn giản cho MarkItDown và nó trung thành chuyển đổi một trang thách thức thành Markdown. Scrapeless trả về HTML đã được hiển thị thực tế, và MarkItDown chuyển đổi điều đó. Khi một mục tiêu xây dựng nội dung của nó bằng JavaScript, đặt js_render thành True trong yêu cầu để HTML đã chứa nội dung; để nó là False, như ở đây, khi đánh dấu được render từ máy chủ.
MarkItDown và trafilatura giải quyết các vấn đề khác nhau. MarkItDown chuyển đổi toàn bộ tài liệu thành Markdown có cấu trúc, giữ lại hình dạng của trang. Trafilatura tách biệt bài viết chính và loại bỏ phần mẫu. Chuyển đổi với MarkItDown khi bạn muốn trang ở dạng Markdown; trích xuất với trafilatura khi bạn chỉ muốn phần nội dung của bài viết.
Trước khi chạy điều này trên một trang web, hãy đọc robots.txt và các điều khoản của nó. Giao thức loại trừ Robot quy định các đường dẫn mà một trang web yêu cầu các client tự động tránh, và tôn trọng điều đó giữ cho pipeline chuyển đổi bền vững. Đối với mẫu lớn hơn, hướng dẫn về pipelines nội dung AI chỉ ra nơi mà một bước chuyển đổi như này phù hợp.
Sẵn sàng để chuyển đổi các trang của riêng bạn? Tạo một tài khoản Scrapeless miễn phí và thay đổi URL mục tiêu.
Kết Luận
Cung cấp cho một mô hình Markdown thay vì HTML là một thay đổi nhỏ nhưng có lợi thực sự, và nó cần hai công cụ: Scrapeless để truy xuất trang và MarkItDown để chuyển đổi nó. Một cuộc gọi convert_stream chuyển 11.021 ký tự HTML thành 2.973 ký tự Markdown có cấu trúc, sẵn sàng cho một bước nhúng hoặc một prompt. Bắt đầu từ kịch bản ở trên, chỉ định nó đến URL của riêng bạn và truyền Markdown cho mô hình của bạn.
Bắt đầu với kế hoạch miễn phí của Scrapeless để truy xuất các trang của riêng bạn, và kiểm tra giá cả của Scrapeless khi bạn kích thước một công việc lặp lại.
Câu Hỏi Thường Gặp
Q: MarkItDown có tự mình lấy trang web không?
Không. MarkItDown chuyển đổi các tài liệu mà bạn cung cấp và không có trình duyệt hoặc mở khóa, vì vậy trên một trang bảo vệ, nó sẽ chuyển đổi một trang thách thức thay vì nội dung. Ghép nó với một công cụ truy xuất như Scrapeless trả về HTML đã được hiển thị, sau đó chuyển đổi HTML đó.
Q: Làm thế nào để tôi truyền HTML đã được lấy cho MarkItDown mà không cần lưu tệp?
Sử dụng convert_stream với HTML được bọc trong io.BytesIO và file_extension=".html", để MarkItDown phân tích các byte trong bộ nhớ như HTML. Điều này tránh việc ghi lại trang đã được lấy vào đĩa chỉ để đọc lại, và Markdown nằm trên text_content của kết quả.
Q: MarkItDown có thể chuyển đổi những định dạng nào?
MarkItDown chấp nhận HTML, PDF, Word, PowerPoint, Excel, hình ảnh và một số định dạng khác, chuyển đổi mỗi định dạng thành Markdown thông qua cùng một giao diện. Đối với việc lấy dữ liệu từ web, đầu vào liên quan là HTML, nhưng cùng một bộ chuyển đổi xử lý một PDF hoặc bảng tính đã được lấy nếu pipeline của bạn cũng thu thập những điều đó.
Q: Tôi nên sử dụng MarkItDown hay trafilatura?
Sử dụng MarkItDown khi bạn muốn toàn bộ tài liệu được chuyển đổi thành Markdown có cấu trúc, và trafilatura khi bạn chỉ muốn bài viết chính với các điều hướng và chân trang bị loại bỏ. Chúng giải quyết các vấn đề khác nhau: một là công cụ chuyển đổi định dạng, cái còn lại là bộ trích xuất nội dung chính.
Q: Tại sao chuyển đổi sang Markdown trước khi gọi mô hình?
Markdown giữ lại tiêu đề, danh sách và liên kết trong một biểu mẫu gọn gàng mà các mô hình ngôn ngữ đọc tốt, trong khi HTML thô tiêu tốn mã cho các thẻ và kiểu mà mô hình phải bỏ qua. Chuyển đổi trước giúp giảm chi phí mã và cung cấp cho mô hình cấu trúc rõ hơn để làm việc.
Tại Scrapless, chúng tôi chỉ truy cập dữ liệu có sẵn công khai trong khi tuân thủ nghiêm ngặt các luật, quy định và chính sách bảo mật trang web hiện hành. Nội dung trong blog này chỉ nhằm mục đích trình diễn và không liên quan đến bất kỳ hoạt động bất hợp pháp hoặc vi phạm nào. Chúng tôi không đảm bảo và từ chối mọi trách nhiệm đối với việc sử dụng thông tin từ blog này hoặc các liên kết của bên thứ ba. Trước khi tham gia vào bất kỳ hoạt động cạo nào, hãy tham khảo ý kiến cố vấn pháp lý của bạn và xem xét các điều khoản dịch vụ của trang web mục tiêu hoặc có được các quyền cần thiết.



