Chuyển đổi html thành văn bản python

Các thư viện python chuyên dụng như Inscriptis và HTML2Text cung cấp chất lượng và tốc độ hội thoại tốt, mặc dù bạn có thể thích giải quyết bằng lxml hoặc BeautifulSoup, đặc biệt nếu bạn đã sử dụng các thư viện này trong chương trình của mình

thư viện

Đoạn mã bên dưới minh họa mã cần thiết để chuyển đổi HTML thành văn bản với inscriptis, html2text, BeautifulSoup và lxml

# inscriptis
from inscripits import get_text
text = get_text[html_content]

# html2text
from html2text import HTML2Text
h = HTML2Text[]
text = h.handle[html_content]

# beautifulsoup
from bs4 import BeautifulSoup
soup = BeautifulSoup[html_content]
text = soup.get_text[]

# lxml
import lxml.html import fromstring
from lxml.html.clean import clean_html
doc = fromstring[html_content]
text = clean_html[doc].text_content[]

Trình duyệt web dựa trên bảng điều khiển

Một tùy chọn phổ biến khác là gọi trình duyệt web dựa trên bảng điều khiển như lynx và w3m để thực hiện chuyển đổi, mặc dù phương pháp này yêu cầu cài đặt các chương trình này trên hệ thống của người dùng

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']

Chọn cách tiếp cận tốt nhất cho bạn

Có một số tiêu chí bạn nên xem xét khi chọn phương pháp chuyển đổi

  • HTML phức tạp đến mức nào để phân tích cú pháp và bạn có loại yêu cầu nào đối với chất lượng chuyển đổi?
  • bạn quan tâm đến toàn bộ trang hay chỉ ở dạng phân số [e. g. , văn bản bài viết, bài đăng trên diễn đàn hoặc bảng] của nội dung?
  • ngữ nghĩa và/hoặc cấu trúc của tệp HTML có cung cấp thông tin có giá trị cho vấn đề của bạn không [e. g. , văn bản được nhấn mạnh để tự động tạo tóm tắt văn bản]?

Chất lượng chuyển đổi

Chất lượng chuyển đổi trở thành một yếu tố khi bạn cần vượt ra ngoài các đoạn mã HTML đơn giản. Các phương pháp tiếp cận không chuyên biệt không giải thích chính xác ngữ nghĩa HTML và do đó, không thể chuyển đổi đúng các cấu trúc như mục hóa, liệt kê và bảng

Ví dụ: BeautifulSoup và lxml, chuyển đổi bảng liệt kê HTML sau thành chuỗi

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
5

  • first
  • second

Ngược lại, HTML2Text, Inscriptis và các trình duyệt dựa trên bảng điều khiển trả về kết quả chính xác

  * first
  * second

Nhưng ngay cả các thư viện chuyên ngành cũng có thể cung cấp các chuyển đổi không chính xác tại một số điểm. Ví dụ, HTML2Text thực hiện khá tốt việc diễn giải HTML nhưng không thành công khi tài liệu HTML trở nên quá phức tạp. Chẳng hạn, các bảng HTML phức tạp hơn thường được sử dụng trên Wikipedia sẽ trả về các biểu diễn văn bản không còn phản ánh đúng quan hệ không gian giữa các đoạn văn bản như được nêu trong ví dụ bên dưới

Đoạn mã Wikipedia được chuyển đổi bằng Inscriptis. Xin lưu ý rằng Inscriptis chỉ bao bọc các dòng đầu vào, nếu ngữ nghĩa của tài liệu HTML yêu cầu điều này

Chur has an oceanic climate in spite of its inland position. Summers are warm and sometimes hot, normally averaging around 25 °C [77 °F] during the day, whilst winter means are around freezing, with daytime temperatures being about 5 °C [41 °F]. Between 1981 and 2010 Chur had an average of 104.6 days of rain per year and on average received 849 mm [33.4 in] of precipitation. The wettest month was August during which time Chur received an average of 112 mm [4.4 in] of precipitation. During this month there was precipitation for an average of 11.2 days. The driest month of the year was February with an average of 47 mm [1.9 in] of precipitation over 6.6 days.[19]


Climate data for Chur [1981-2010]    
Month                                  Jan     Feb     Mar     Apr     May     Jun     Jul     Aug     Sep     Oct     Nov     Dec     Year  
Average high °C [°F]                   4.8     6.4     11.2    15.1    20.0    22.7    24.9    24.1    20.0    16.1    9.5     5.3     15.0  
                                       [40.6]  [43.5]  [52.2]  [59.2]  [68.0]  [72.9]  [76.8]  [75.4]  [68.0]  [61.0]  [49.1]  [41.5]  [59.0]
Daily mean °C [°F]                     0.7     1.8     5.9     9.7     14.3    17.1    19.1    18.5    14.8    10.8    5.2     1.7     10.0  
                                       [33.3]  [35.2]  [42.6]  [49.5]  [57.7]  [62.8]  [66.4]  [65.3]  [58.6]  [51.4]  [41.4]  [35.1]  [50.0]
Average low °C [°F]                    −2.6    −2.0    1.6     4.6     8.9     11.8    13.8    13.7    10.3    6.6     1.7     −1.4    5.6   
                                       [27.3]  [28.4]  [34.9]  [40.3]  [48.0]  [53.2]  [56.8]  [56.7]  [50.5]  [43.9]  [35.1]  [29.5]  [42.1]
Average precipitation mm [inches]      51      47      55      49      71      93      109     112     81      56      70      55      849   
                                       [2.0]   [1.9]   [2.2]   [1.9]   [2.8]   [3.7]   [4.3]   [4.4]   [3.2]   [2.2]   [2.8]   [2.2]   [33.4]
Average snowfall cm [inches]           34.0    24.7    10.3    1.5     0.4     0.0     0.0     0.0     0.1     0.1     10.0    20.6    101.7 
                                       [13.4]  [9.7]   [4.1]   [0.6]   [0.2]   [0.0]   [0.0]   [0.0]   [0.0]   [0.0]   [3.9]   [8.1]   [40.0]
Average precipitation days [≥ 1.0 mm]  7.3     6.6     8.1     7.5     9.9     11.2    11.0    11.2    8.4     7.0     8.5     7.9     104.6 
Average snowy days [≥ 1.0 cm]          4.8     3.9     2.5     0.4     0.1     0.0     0.0     0.0     0.0     0.0     1.6     4.1     17.4  
Average relative humidity [%]          73      70      65      63      64      67      68      71      73      73      74      75      70    
Mean monthly sunshine hours            97      112     139     147     169     177     203     185     155     135     93      81      1,692 
Source: MeteoSwiss[19]               

Đoạn mã tương tự được chuyển đổi bằng HTML2Text bằng cài đặt mặc định

Chur has an [oceanic climate][/wiki/Oceanic_climate "Oceanic climate"] in
spite of its inland position. Summers are warm and sometimes hot, normally
averaging around 25 °C [77 °F] during the day, whilst winter means are around
freezing, with daytime temperatures being about 5 °C [41 °F]. Between 1981 and
2010 Chur had an average of 104.6 days of rain per year and on average
received 849 mm [33.4 in] of
[precipitation][/wiki/Precipitation_\[meteorology\] "Precipitation
\[meteorology\]"].

The wettest month was August during which time Chur
received an average of 112 mm [4.4 in] of precipitation. During this month
there was precipitation for an average of 11.2 days. The driest month of the
year was February with an average of 47 mm [1.9 in] of precipitation over 6.6
days.[19]

Climate data for Chur [1981-2010]  
---  
Month  | Jan  | Feb  | Mar  | Apr  | May  | Jun  | Jul  | Aug  | Sep  | Oct  |
Nov  | Dec  | Year  
Average high °C [°F]  | 4.8  
[40.6]  | 6.4  
[43.5]  | 11.2  
[52.2]  | 15.1  
[59.2]  | 20.0  
[68.0]  | 22.7  
[72.9]  | 24.9  
[76.8]  | 24.1  
[75.4]  | 20.0  
[68.0]  | 16.1  
[61.0]  | 9.5  
[49.1]  | 5.3  
[41.5]  | 15.0  
[59.0]  
Daily mean °C [°F]  | 0.7  
[33.3]  | 1.8  
[35.2]  | 5.9  
[42.6]  | 9.7  
[49.5]  | 14.3  
[57.7]  | 17.1  
[62.8]  | 19.1  
[66.4]  | 18.5  
[65.3]  | 14.8  
[58.6]  | 10.8  
[51.4]  | 5.2  
[41.4]  | 1.7  
[35.1]  | 10.0  
[50.0]  

Văn bản HTML2 không diễn giải chính xác sự liên kết của các giá trị nhiệt độ trong bảng và do đó, không duy trì được vị trí không gian của các thành phần văn bản

Ngược lại, Inscriptis đã được tối ưu hóa để cung cấp các biểu diễn văn bản chính xác và thậm chí xử lý các phần tử xếp tầng [e. g. , bảng xếp tầng, mục hóa trong bảng, v.v. ] và một số thuộc tính CSS có liên quan đến việc căn chỉnh nội dung. Nếu nói đến việc phân tích các cấu trúc như vậy, nó thường cung cấp các chuyển đổi thậm chí còn chính xác hơn so với trình duyệt lynx dựa trên văn bản

Nếu bạn cần diễn giải các trang Web và JavaScript thực sự phức tạp, bạn có thể cân nhắc sử dụng Selenium cho phép bạn điều khiển từ xa các Trình duyệt web tiêu chuẩn như Google Chrome và Firefox từ Python. Xin lưu ý rằng giải pháp này có những nhược điểm đáng kể về độ phức tạp, yêu cầu tài nguyên, khả năng mở rộng và tính ổn định

Chỉ trích xuất nội dung có liên quan

Việc loại bỏ các phần tử nhiễu trong các trang Web [thường được ký hiệu là bản soạn sẵn] là một vấn đề phổ biến khác. Ví dụ, một trang tin tức điển hình chứa các yếu tố điều hướng, thông tin về các bài báo liên quan, quảng cáo, v.v. thường không liên quan đến các nhiệm vụ khai thác tri thức

Đối với các ứng dụng như vậy, tồn tại phần mềm chuyên dụng, chẳng hạn như jusText, dragnet và boilerpy3 chỉ nhằm mục đích trích xuất nội dung có liên quan. Adrien Barbaresi đã viết một bài báo xuất sắc về chủ đề này cũng đánh giá một số phương pháp trích xuất văn bản được sử dụng phổ biến nhất. Ngoài các phương pháp trích xuất nội dung chung, còn có các thư viện chuyên biệt xử lý một số loại trang Web. Chẳng hạn, bộ công cụ Thu hoạch đã được tối ưu hóa để trích xuất các bài đăng và siêu dữ liệu bài đăng từ các diễn đàn Web và vượt trội hơn các phương pháp tiếp cận không chuyên biệt cho nhiệm vụ này

Chuyển đổi bảng thành Pandas Dataframes

Nếu bạn cần thao tác trên dữ liệu trong các bảng HTML, bạn có thể xem xét hàm

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
6 của gấu trúc trả về danh sách các khung dữ liệu cho tất cả các bảng trong nội dung HTML

________số 8

Giữ nguyên cấu trúc và ngữ nghĩa HTML với các chú thích

Trước đây, tôi thường tình cờ gặp các ứng dụng mà một số cấu trúc và ngữ nghĩa được mã hóa trong tài liệu HTML gốc sẽ hữu ích cho các tác vụ xuôi dòng. Với việc phát hành Inscriptis 2. 0, Inscriptis hỗ trợ cái gọi là quy tắc chú thích, cho phép trích xuất siêu dữ liệu bổ sung từ tệp HTML

Ví dụ bên dưới cho thấy cách các chú thích này hoạt động khi phân tích cú pháp đoạn mã HTML sau được lưu trữ trong tệp

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
7

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
0

Từ điển

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
8 trong mã bên dưới ánh xạ các thẻ, thuộc tính và giá trị HTML tới siêu dữ liệu do người dùng chỉ định sẽ được đính kèm với các đoạn văn bản phù hợp

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
2

Các quy tắc chú thích được sử dụng trong phương thức

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
9 của Inscriptis trả về một từ điển của văn bản được trích xuất và một danh sách các chú thích tương ứng

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
4

Một bộ vị trí bắt đầu và kết thúc trong văn bản được trích xuất và siêu dữ liệu tương ứng mô tả từng chú thích. Ví dụ: trong ví dụ trên, bốn chữ cái đầu tiên của văn bản được chuyển đổi [tham chiếu đến thuật ngữ

  • first
  • second
0] chứa nội dung ban đầu được đánh dấu bằng thẻ
  • first
  • second
1 được chú thích bằng
  • first
  • second
2 và
  • first
  • second
1. Các chú thích này có thể được sử dụng sau này trong ứng dụng của bạn hoặc bằng phần mềm của bên thứ ba như doccano có thể nhập và trực quan hóa nội dung được chú thích JSONL [xin lưu ý rằng doccano hiện không hỗ trợ các chú thích chồng chéo]

  • first
  • second
4 đi kèm với ứng dụng khách dòng lệnh
  • first
  • second
5 có khả năng hậu xử lý nội dung được chú thích và chuyển đổi nó thành [i] XML, [ii] danh sách các biểu mẫu bề mặt và siêu dữ liệu [i. e. , văn bản đã được chú thích] và [iii] để trực quan hóa nội dung được chuyển đổi và chú thích trong tài liệu HTML

  • Trích xuất các dạng bề mặt bằng cách sử dụng
    • first
    • second
    6 cho các ví dụ trên tạo ra danh sách sau đây ánh xạ siêu dữ liệu tới các dạng bề mặt tương ứng

    import subprocess
    
    # call lynx to perform the conversion
    text = subprocess.check_output[['lynx', '-dump', url]]
    text = text.decode['utf8']
    
    # use w3m instead
    text = subprocess.check_output[['w3m', '-dump', url]]
    text = text.decode['utf8']
    
    0

  • chuyển đổi XML [
    • first
    • second
    7] trả về đầu ra sau

    import subprocess
    
    # call lynx to perform the conversion
    text = subprocess.check_output[['lynx', '-dump', url]]
    text = text.decode['utf8']
    
    # use w3m instead
    text = subprocess.check_output[['w3m', '-dump', url]]
    text = text.decode['utf8']
    
    1

  • chuyển đổi HTML mang lại một tệp HTML chứa văn bản được trích xuất và các chú thích tương ứng. Các ví dụ sau minh họa hình ảnh trực quan này cho hai trường hợp sử dụng phức tạp hơn

ngăn xếp chồng lên nhau

Việc xuất HTML của trang Stackoverflow được chú thích sử dụng các quy tắc chú thích sau để chú thích các tiêu đề, nội dung được nhấn mạnh, mã và thông tin về người dùng và nhận xét

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
2

Tệp HTML tương ứng đã được tạo bằng ứng dụng khách dòng lệnh

  • first
  • second
5 và các tham số dòng lệnh sau

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
3

Wikipedia

Ví dụ thứ hai hiển thị một đoạn trích của trang Wikipedia đã được chú thích với các quy tắc bên dưới

import subprocess

# call lynx to perform the conversion
text = subprocess.check_output[['lynx', '-dump', url]]
text = text.decode['utf8']

# use w3m instead
text = subprocess.check_output[['w3m', '-dump', url]]
text = text.decode['utf8']
4

Một số lưu ý cuối cùng

Inscriptis đã được tối ưu hóa để cung cấp các biểu diễn chính xác của các tài liệu HTML thường ngang bằng hoặc thậm chí vượt qua chất lượng của các trình duyệt Web dựa trên bảng điều khiển như Lynx và w3m. Nếu điều này là không đủ cho các ứng dụng của bạn [e. g. , vì bạn cũng cần JavaScript], bạn có thể cân nhắc sử dụng Selenium, sử dụng Chrome hoặc Firefox để thực hiện chuyển đổi. Rõ ràng tùy chọn này sẽ yêu cầu nhiều tài nguyên hơn đáng kể, quy mô kém hơn và được coi là kém ổn định hơn so với việc sử dụng các phương pháp nhẹ

Xin lưu ý rằng tôi là tác giả của Inscriptis và đương nhiên bài viết này tập trung nhiều hơn vào các tính năng mà nó cung cấp. Tuy nhiên, tôi cũng đã sử dụng thành công HTML2Text, lxml, BeautifulSoup, Lynx và w3m trong công việc của mình và tất cả những công cụ này đều là những công cụ rất có khả năng xử lý nhiều tình huống ứng dụng trong thế giới thực

Làm cách nào để chuyển đổi tệp HTML thành tệp văn bản trong Python?

Các bước chuyển đổi HTML sang TXT qua Python .
Tải tệp HTML bằng phiên bản Sổ làm việc
Gọi sổ làm việc. phương thức lưu
Truyền đường dẫn đầu ra với phần mở rộng TXT làm tham số
Kiểm tra đường dẫn được chỉ định cho tệp TXT kết quả

Làm cách nào để chuyển đổi chuỗi HTML thành chuỗi trong Python?

điều kiện tiên quyết. mô-đun html. Đưa ra một chuỗi có các ký tự HTML, nhiệm vụ là chuyển đổi các ký tự HTML thành một chuỗi. Điều này có thể đạt được với sự trợ giúp của html. .
cú pháp. html. không thoát [Chuỗi]
ví dụ 1. Trăn 3. 6+
đầu ra. Γeeks for Γeeks. .
ví dụ 2. Trăn 2. 6-3. 3. Chúng ta có thể sử dụng HTMLParser. .
đầu ra. Γeeks for Γeeks

Làm cách nào để phân tích cú pháp văn bản HTML bằng Python?

Ví dụ .
từ html. trình phân tích cú pháp nhập HTMLParser
Trình phân tích cú pháp lớp [HTMLParser]
# phương pháp nối thêm thẻ bắt đầu vào danh sách start_tags
def handle_starttag[bản thân, thẻ, attrs]
start_tags toàn cầu
start_tags. nối thêm [thẻ]
# phương thức nối thêm thẻ kết thúc vào danh sách end_tags
def handle_endtag[bản thân, thẻ]

Bạn có thể đọc tệp HTML bằng Python không?

Đọc tệp HTML . Sau đó, sử dụng tham số trình phân tích cú pháp html để đọc toàn bộ tệp html . Tiếp theo, chúng tôi in một vài dòng đầu tiên của trang html. Khi chúng tôi thực thi đoạn mã trên, nó tạo ra kết quả sau.

Chủ Đề