Cách Trích Xuất Văn Bản Từ HTML Bằng Python: 4 Phương Pháp Đáng Tin Cậy
TL;DR
Beautiful Soup là phương pháp rõ ràng nhất để trích xuất văn bản từ HTML không hoàn hảo.
lxml là sự lựa chọn mạnh mẽ khi XPath và phân tích tỷ lệ cao là quan trọng.
Trafilatura thì tốt hơn khi mục tiêu là văn bản bài viết chính thay vì mọi nhãn điều hướng có thể nhìn thấy.
Inscriptis hữu ích khi bố cục văn bản, bảng và danh sách cần được bảo tồn tốt hơn.
Xóa các nội dung script và style, bảo tồn các ranh giới khối, chuẩn hóa Unicode và xác thực với văn bản mong đợi trước khi lưu trữ.
Cách tốt nhất để trích xuất văn bản từ HTML bằng Python là gì?
Phương pháp tốt nhất phụ thuộc vào việc đầu vào là một đoạn mã, một tài liệu hoàn chỉnh, hay một trang được hiển thị. Nstdata Crawl có thể cung cấp nội dung nguồn đã được làm sạch hoặc hiển thị khi việc thu thập là phần khó khăn; Beautiful Soup, lxml, Trafilatura và Inscriptis giải quyết những vấn đề phân tích khác nhau sau khi HTML có sẵn. Regex một mình không phải là một trình phân tích HTML đáng tin cậy.
Hướng dẫn dự án web-scraping Python cung cấp bối cảnh rộng hơn cho quy trình. Việc trích xuất văn bản nên bảo tồn đủ cấu trúc cho điểm đến của nó: chỉ mục tìm kiếm có thể cần các tiêu đề và đoạn văn, trong khi một bộ phân loại gọn nhẹ có thể cần văn bản thuần chuẩn hóa.
Bạn cần gì trước khi bắt đầu?
Cài đặt bốn thư viện trong một môi trường cách ly. Sử dụng một fixture chung để so sánh các đầu ra một cách công bằng.
HTML ="""<div><style>.x{display:none}</style><nav>Trang chủ</nav><main>
<h1>Phân tích HTML</h1><p>Giữ lại <strong>văn bản có ý nghĩa</strong>.</p>
<script>ignore()</script></main></div>"""
Kết nối đến Proxy đúng
Chọn vị trí và chế độ phiên làm việc phù hợp với quy trình của bạn, sau đó kết nối qua Nstdata.
Phương pháp 1: Sử dụng Beautiful Soup để phân tích cú pháp tổng quát dễ đọc
Bước 1: Xây dựng cây phân tích cú pháp
from bs4 import BeautifulSoup
soup = BeautifulSoup(HTML,"html.parser")
Bước 2: Xóa các nút không phải nội dung
for node in soup.select("script, style, noscript, template"): node.decompose()
Bước 3: Bảo tồn biên giới và chuẩn hóa khoảng trắng
lines =[line.strip()for line in soup.get_text("\n").splitlines()]text ="\n".join(line for line in lines if line)print(text)
Beautiful Soup có khả năng chịu đựng mã không hợp lệ và có một API chọn lọc dễ tiếp cận. Hạn chế của nó là get_text() không biết các khối hiển thị nào là nội dung chính. Sử dụng các bộ chọn ngữ nghĩa như main, article, hoặc một bộ chứa nội dung đã được xác minh khi có sẵn. Kiểm tra tài liệu chính thức của Beautiful Soup để biết hành vi của trình phân tích.
Phương pháp 2: Sử dụng lxml cho XPath và thông lượng
Bước 1: Phân tích tài liệu
from lxml import html
tree = html.fromstring(HTML)
Bước 2: Xóa các phần tử không mong muốn
for node in tree.xpath("//script|//style|//noscript|//template"): node.drop_tree()
Bước 3: Trích xuất các nút văn bản được chọn
parts = tree.xpath("//main//text()[normalize-space()]")text ="\n".join(part.strip()for part in parts if part.strip())
lxml nhanh và cung cấp kiểm soát XPath chính xác, nhưng XPath không cẩn thận có thể làm phẳng cấu trúc có ý nghĩa hoặc thu thập nội dung ẩn. Tài liệu chính thức của lxml.html mô tả các công cụ HTML của nó.
Phương pháp 3: Sử dụng Trafilatura để trích xuất nội dung chính
Bước 1: Chuyển tài liệu hoàn chỉnh
import trafilatura
text = trafilatura.extract(HTML, include_links=False, include_images=False)
Bước 2: Xử lý kết quả bị thiếu
Trafilatura có thể không trả về nội dung chính cho các trang ngắn, không bình thường, hoặc chứa nhiều điều hướng. Xem xét đó như một thất bại xác thực và quay lại phương pháp DOM có phạm vi thay vì lưu trữ một tài liệu trống.
Bước 3: Giữ lại siêu dữ liệu một cách riêng biệt
Việc trích xuất nội dung chính cố ý loại bỏ phần mở đầu. Nếu tiêu đề, URL chuẩn, tác giả, hoặc ngày xuất bản quan trọng, hãy trích xuất các trường đó vào siêu dữ liệu thay vì mong đợi chúng tồn tại qua việc chuyển đổi văn bản đơn giản. Kiểm tra các tùy chọn hiện tại trong tài liệu của Trafilatura.
Phương pháp 4: Sử dụng Inscriptis khi bố cục mang ý nghĩa
Bước 1: Chuyển đổi HTML thành văn bản nhận thức về bố cục
from inscriptis import get_text
text = get_text(HTML)
Bước 2: Xem xét danh sách và bảng
Inscriptis nhằm mục đích bảo tồn bố cục hiển thị tốt hơn so với việc kết hợp văn bản con đơn giản. Điều này có thể hữu ích với các bảng, danh sách, và tài liệu mà trong đó các dòng nghỉ truyền đạt cấu trúc.
Bước 3: Chuẩn hóa cho điểm đến
Không áp dụng thu hẹp khoảng trắng mạnh mẽ nếu các cột bảng hoặc khoảng cách danh sách quan trọng. Tạo các hồ sơ chuẩn hóa riêng biệt cho tìm kiếm, nhập LLM, và xem xét lưu trữ.
Làm thế nào để bạn lấy HTML trước khi trích xuất văn bản?
Sử dụng một khách hàng HTTP hạn chế cho các trang tĩnh và xác thực trạng thái, loại nội dung, mã hóa, URL cuối, và danh tính trang mong đợi. Nếu trang yêu cầu JavaScript, hãy sử dụng một trình duyệt hoặc lớp kết xuất được quản lý trước khi phân tích. Nstdata Crawl liên quan khi việc kết xuất và thu thập nguồn cần được quản lý; tham khảo giá hiện tại của Crawl trước khi ước tính chi phí sản xuất.
Hướng dẫn web-scraping JavaScript giải thích khi nào một trình phân tích HTML không thể nhìn thấy nội dung được tạo ra bởi trình duyệt. Một trình phân tích không thể khôi phục dữ liệu mà không bao giờ đến trong đầu vào của nó.
Đối với các công việc lớn hơn, hướng dẫn mở rộng web-scraping giải thích tại sao thông lượng của trình phân tích phải được đánh giá cùng với hàng đợi, thử lại, và chất lượng bản ghi được chấp nhận.
Làm thế nào để bạn làm sạch văn bản được trích xuất mà không làm hỏng nó?
Chuẩn hóa Unicode, chuyển đổi khoảng trắng không ngắt, xóa các dòng trống lặp lại, và giữ lại các biên giới khối. Tránh xóa tất cả các dòng ngắn vì tiêu đề và nhãn có thể ngắn. Tránh viết thường nội dung dự định hiển thị hoặc trích xuất thực thể. Giữ nguyên nguồn thô hoặc một băm được phép để có thể điều tra một sự suy giảm trong việc làm sạch.
Xây dựng các tiện ích vàng chứa tiêu đề, đoạn văn, thực thể, danh sách, bảng, nút ẩn, thẻ không hợp lệ, và văn bản không phải ASCII. So sánh đầu ra chính xác hoặc một đại diện khối cấu trúc trong các bài kiểm tra tự động. Tiêu chuẩn HTML của WHATWG là tham chiếu chính khi hành vi của trình phân tích phụ thuộc vào cấu trúc tài liệu.
Kết luận
Sử dụng Beautiful Soup để phân tích tổng quát dễ hiểu, lxml cho XPath và hiệu suất, Trafilatura cho việc trích xuất nội dung bài viết, và Inscriptis khi bố cục quan trọng. Đánh giá các phương pháp với cùng một chuẩn và đo lường nội dung bị thiếu, boilerplate và sự bảo toàn cấu trúc. Khi HTML đầu vào không hoàn chỉnh, hãy giải quyết việc thu thập trước với trình duyệt hoặc Nstdata Crawl. Đối với các công việc lặp lại với nhiều nguồn proxy, Nstdata Proxy Manager có thể xử lý định tuyến tách biệt khỏi phân tích.
Trải nghiệm Nstdata — Bắt đầu dùng thử miễn phí hôm nay
Q: Python có thể trích xuất văn bản từ HTML bị hỏng không?
Có. Beautiful Soup và lxml đều khôi phục được nhiều tài liệu bị hỏng, nhưng cách sửa chữa của chúng có thể khác nhau, vì vậy hãy thử nghiệm trình phân tích đã chọn với các chuẩn đại diện.
Q: Tại sao get_text lại bao gồm JavaScript hoặc CSS?
Trình phân tích coi nội dung script và style là các nút văn bản trừ khi những phần tử đó bị loại bỏ. Phân rã chúng trước khi trích xuất văn bản.
Q: Regex có phù hợp để loại bỏ thẻ HTML không?
Regex có thể làm sạch một phần đã biết, nhưng không phải là trình phân tích HTML tổng quát đáng tin cậy vì việc lồng ghép, đánh dấu bị hỏng, thực thể và ngôn ngữ nhúng làm phức tạp ngữ pháp.
Q: Làm thế nào để chỉ trích xuất văn bản bài viết?
Sử dụng một bộ chọn article hoặc nội dung được xác minh khi mẫu đã biết, hoặc một thư viện nội dung chính như Trafilatura khi các mẫu khác nhau.
Q: Phương pháp nào là nhanh nhất?
lxml và các trình phân tích dựa trên native khác thường nhanh hơn Beautiful Soup, nhưng hiệu suất cần được đo lường với các tài liệu thực và việc dọn dẹp cần thiết.
Các trang được rend bằng JavaScript yêu cầu phương thức phù hợp với đường dẫn dữ liệu của chúng. Hướng dẫn này sẽ đề cập đến việc trích xuất mạng, ba phương pháp trình duyệt và việc render được quản lý.
Ivy Lin
Sep. 28th 2026
Trải nghiệm Nstproxy Crawl - Bắt Đầu Dùng Thử Miễn Phí Hôm Nay
Thu thập toàn bộ trang web chỉ với một yêu cầu API
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.
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