Trafilatura Web Scraping: Trích xuất văn bản sạch cho LLMs
Web Data Collection Specialist
Tóm tắt:
- Trafilatura biến một trang HTML thô thành văn bản nội dung chính sạch sẽ, loại bỏ các điều hướng, thanh bên và chân trang để mô hình ngôn ngữ thấy được nội dung mà không bị phân tâm bởi những yếu tố khác.
- Trên trang ví dụ, 9.275 ký tự HTML trở thành 1.324 ký tự văn bản sạch, giảm 86% kích thước giúp dễ dàng đặt vào cửa sổ ngữ cảnh của LLM.
- Trafilatura không có lớp fetch để xóa các khối, vì vậy hướng dẫn này kết hợp Scrapeless để truy xuất với trafilatura để trích xuất.
trafilatura.extractsản xuất văn bản thuần túy, và lệnh gọi tương tự vớioutput_format="markdown"hoặc"json"sẽ cung cấp Markdown hoặc một bản ghi metadata với tiêu đề, tác giả và ngày tháng.- Sự phân chia là rõ ràng: Scrapeless lấy trang, trafilatura lấy bài viết ra từ đó.
- Bắt đầu với gói miễn phí của Scrapeless và chỉ định trình trích xuất đến các trang của riêng bạn.
Một trang HTML bị thu thập thường không phải là thứ bạn mong muốn. Điều hướng, banner cookie, thanh bài viết liên quan và chân trang có thể chiếm phần lớn kích thước, và việc cung cấp tất cả những thứ đó cho một mô hình ngôn ngữ sẽ lãng phí token và làm loãng tín hiệu. Trafilatura giải quyết nửa sau của vấn đề đó: với HTML, nó tìm nội dung chính và trả về dưới dạng văn bản sạch. Nó không giải quyết nửa đầu, vì không thể lấy một trang mà chống lại.
Hướng dẫn này kết hợp hai nửa đó. API thu thập dữ liệu toàn cầu Scrapeless lấy trang, và trafilatura trích xuất bài viết. Mọi con số dưới đây đều đến từ một lần chạy thực tế trên một trang công khai.
Trafilatura làm gì
Trafilatura là một thư viện trích xuất nội dung chính: nó đọc HTML và trả về văn bản bài viết mà không có những phần thừa xung quanh. Nó đi qua cấu trúc trang để phân biệt nội dung và điều hướng, và chất lượng trích xuất của nó được đánh giá trong bài báo đã được bình duyệt giới thiệu. Đối với bất kỳ ai xây dựng một quy trình truy xuất hoặc LLM, đó là bước giữa "Tôi có HTML" và "Tôi có văn bản đáng để nhúng."
Điều mà trafilatura không phải là một trình thu thập dữ liệu. Nó không có trình duyệt, không có proxy, và không có cách nào vượt qua một thử thách truy cập. fetch_url tích hợp sẵn của nó là một client HTTP đơn giản, vì vậy trên một trang được bảo vệ, nó nhận được một trang bị chặn và trung thành trích xuất khối đó. Đó là lý do tại sao việc truy xuất thuộc về một công cụ được xây dựng cho nó.
Cài đặt
Trafilatura chỉ cần cài đặt một lần bằng pip.
bash
pip install trafilatura
Đặ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ữ lại placeholder ra khỏi mã nguồn của bạn.
bash
export SCRAPELESS_API_KEY="sk_your_key_here"
Trích xuất cơ bản
Lấy trang với Scrapeless, sau đó chuyển HTML cho trafilatura.extract. Nó trả về nội dung chính dưới dạng văn bản sạch.
python
import json
import os
import urllib.request
import trafilatura
API_URL = "https://api.scrapeless.com/api/v2/unlocker/request"
TARGET = "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
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)
text = trafilatura.extract(html)
print(f"raw html chars: {len(html)}")
print(f"clean text chars: {len(text)}")
print(f"boilerplate removed: {100 * (1 - len(text) / len(html)):.0f}%")
Đầu ra cho thấy trang co lại bao nhiêu khi phần ngoại vi bị xóa.
text
raw html chars: 9275
clean text chars: 1324
boilerplate removed: 86%
1.324 ký tự còn lại là tiêu đề, giá, tình trạng sản phẩm và mô tả sản phẩm; điều hướng, bột đường và chân trang đã bị xóa. Việc giảm 86% đó là số token mà bạn không còn phải trả cho một mô hình để đọc.
Markdown và Metadata
Văn bản thuần túy là mặc định, nhưng một quy trình truy xuất thường muốn cấu trúc. Lệnh gọi extract tương tự lấy một output_format, vì vậy Markdown giữ lại các tiêu đề và danh sách mà mô hình dễ đọc.
python
markdown = trafilatura.extract(html, output_format="markdown")
print(f"markdown chars: {len(markdown)}")
Để xác minh nguồn gốc, hãy yêu cầu JSON cùng với metadata. Bản ghi chứa tiêu đề, tác giả, tên miền, ngày tháng và ngôn ngữ bên cạnh văn bản, đây là những gì bạn lưu trữ bên cạnh một embedding để một văn bản được truy xuất có thể trích dẫn nguồn của nó.
python
record = json.loads(trafilatura.extract(html, output_format="json", with_metadata=True))
print(f"title: {record['title']}")
Bộ trích xuất hoàn chỉnh
Đặt fetch, văn bản, Markdown và metadata lại với nhau, và một script nhận URL cho mọi thứ mà một pipeline hạ nguồn cần.
python
import json
import os
import urllib.request
import trafilatura
API_URL = "https://api.scrapeless.com/api/v2/unlocker/request"
TARGET = "https://books.toscrape.com/catalogue/a-light-in-the-attic_1000/index.html"
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)
print(f"ký tự html thô: {len(html)}")
text = trafilatura.extract(html)
print(f"ký tự văn bản sạch: {len(text)}")
print(f"boilerplate bị xóa: {100 * (1 - len(text) / len(html)):.0f}%")
markdown = trafilatura.extract(html, output_format="markdown")
print(f"ký tự markdown: {len(markdown)}")
record = json.loads(trafilatura.extract(html, output_format="json", with_metadata=True))
print(f"tiêu đề: {record['title']}")
Chạy báo cáo mỗi đầu ra mà pipeline tiêu thụ.
text
ký tự html thô: 9275
ký tự văn bản sạch: 1324
boilerplate bị xóa: 86%
ký tự markdown: 1474
tiêu đề: A Light in the Attic
Nơi Trafilatura Dừng Lại
Trafilatura trích xuất; nó không lấy lại sau một khối, và ranh giới đó là lý do mà hướng dẫn này sử dụng hai công cụ. Hướng trafilatura đến một trang được bảo vệ và nó nhận được một thử thách hoặc một shell trống, sau đó không trích xuất được gì hữu ích từ đó. Scrapeless xử lý việc lấy dữ liệu, trả về HTML đã được render, và trafilatura đảm nhận từ đó. Khi một mục tiêu render bài viết của nó bằng JavaScript, hãy đặt js_render thành True trong yêu cầu để HTML mà trafilatura nhận được đã chứa nội dung; để nó là False, như ở đây, khi markup được render bởi máy chủ.
Trước khi bạn 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ừ Robots xác định các đường dẫn mà một trang web yêu cầu các khách hàng tự động tránh, và tôn trọng điều đó duy trì một pipeline trích xuất bền vững. Đối với bức tranh tiếp nhận rộng hơn, hướng dẫn về việc xây dựng một pipeline văn bản web sạch cho RAG cho thấy nơi bước trích xuất này phù hợp.
Sẵn sàng thử nghiệm với các trang của riêng bạn chưa? Tạo một tài khoản Scrapeless miễn phí và thay đổi URL mục tiêu.
Kết Luận
Văn bản sạch là thứ mà một mô hình ngôn ngữ thực sự cần, và để đạt được điều đó cần hai bước: lấy dữ liệu, sau đó trích xuất. Scrapeless trả về trang, và trafilatura chuyển đổi 9.275 ký tự HTML thành 1.324 ký tự nội dung, ở định dạng văn bản, Markdown hoặc một báo cáo metadata. Tài liệu trafilatura bao gồm đầy đủ các định dạng đầu ra và tùy chọn điều chỉnh. Bắt đầu từ script hoàn chỉnh, thay thế bằng URL của bạn, và cung cấp kết quả cho bước nhúng hoặc LLM của bạn.
Bắt đầu với gói miễn phí Scrapeless để lấy các trang của riêng bạn, và kiểm tra giá Scrapeless khi bạn tính toán một công việc định kỳ.
Câu Hỏi Thường Gặp
Q: Trafilatura có tự mình fetch các trang web không?
Nó có một fetch_url được tích hợp, nhưng đó là một khách hàng HTTP bình thường không có khả năng bỏ chặn, vì vậy nó thất bại trên các trang nằm sau một thử thách truy cập. Kết hợp nó với một công cụ lấy dữ liệu như Scrapeless trả về HTML đã được render, và để trafilatura làm những gì nó giỏi, đó là trích xuất nội dung chính từ HTML đó.
Q: Trafilatura khác gì so với BeautifulSoup?
BeautifulSoup là một bộ phân tích cú pháp: bạn chỉ định các phần tử mà bạn muốn chọn. Trafilatura là một công cụ trích xuất: nó quyết định phần nào của trang là nội dung chính và trả về nó, không cần viết chỉ định nào. Sử dụng BeautifulSoup khi bạn cần các trường cụ thể, và trafilatura khi bạn muốn nội dung bài viết dưới dạng văn bản sạch.
Q: Trafilatura hỗ trợ các định dạng đầu ra nào?
Hàm extract nhận một output_format là txt (mặc định), markdown, json, hoặc xml. Markdown giữ lại tiêu đề và danh sách để nhập cho LLM, và JSON với with_metadata=True thêm tiêu đề, tác giả, ngày tháng và ngôn ngữ bên cạnh văn bản.
Q: Trafilatura có thể giữ lại tiêu đề và tác giả không?
Vâng. Gọi extract với output_format="json" và with_metadata=True, và bản ghi trả về bao gồm title, author, hostname, date, và language. Lưu trữ metadata đó bên cạnh một embedding cho phép phần được truy xuất báo cáo nơi nó đến từ đâu.
Hỏi: Tại sao lại trích xuất nội dung chính thay vì gửi toàn bộ trang đến LLM?
Hầu hết một trang gồm điều hướng, quảng cáo và chân trang, mà trên trang ví dụ là 86% số ký tự. Gửi tất cả điều đó tốn token và làm chôn vùi tín hiệu, vì vậy việc trích xuất nội dung chính trước tiên sẽ cắt giảm chi phí và cải thiện khả năng tập trung của mô hình vào văn bản quan trọng.
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.



