Hướng dẫn html to plain text python - html sang python văn bản thuần túy

57

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Tôi đang cố gắng chuyển đổi một đoạn văn bản HTML với BeautifulSoup. Đây là một ví dụ:

Some text more text even more text

  • list item
  • yet another list item

Some other text

  • list item
  • yet another list item

Tôi đã thử làm một cái gì đó như:

def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)

... Nhưng theo cách đó, phần tử nhịp của tôi luôn ở trên một dòng mới. Đây tất nhiên là một ví dụ đơn giản. Có cách nào để có được văn bản trong trang HTML như cách nó sẽ được hiển thị trong trình duyệt (không cần quy tắc CSS, chỉ là cách thường xuyên div, span, li, v.v. Các yếu tố được hiển thị) trong Python không?

Đã hỏi ngày 12 tháng 11 năm 2012 lúc 2:06Nov 12, 2012 at 2:06

Hướng dẫn html to plain text python - html sang python văn bản thuần túy

1

Đẹp là một thư viện cào, vì vậy nó có thể không phải là lựa chọn tốt nhất để thực hiện kết xuất HTML. Nếu nó không cần thiết để sử dụng đẹp, bạn nên xem

def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
1. Ví dụ:

import html2text
html = open("foobar.html").read()
print html2text.html2text(html)

Điều này ra:

Some text more text even more text

  * list item
  * yet another list item

Some other text

  * list item
  * yet another list item

Đã trả lời ngày 12 tháng 11 năm 2012 lúc 3:09Nov 12, 2012 at 3:09

Hướng dẫn html to plain text python - html sang python văn bản thuần túy

Deldeldel

6.09910 Huy hiệu vàng41 Huy hiệu bạc45 Huy hiệu đồng10 gold badges41 silver badges45 bronze badges

5

Tôi đã gặp phải vấn đề tương tự khi cố gắng phân tích HTML được kết xuất. Về cơ bản, có vẻ như BS không phải là gói lý tưởng cho việc này. @Del cung cấp giải pháp HTML2Text tuyệt vời.

Trên một câu hỏi khác nhau: BeautifulSoup get_text không tước tất cả các thẻ và javascript @helge được đề cập bằng NLTK. Thật không may, NLTK dường như đang ngừng phương pháp này.

Tôi đã thử cả HTML2TEXT và NLTK.CLEAN_HTML và rất ngạc nhiên bởi kết quả thời gian vì vậy nghĩ rằng họ đã đảm bảo một câu trả lời cho hậu thế. Tất nhiên, tốc độ phụ thuộc rất nhiều vào nội dung của dữ liệu ...

Trả lời từ @Helge (NLTK).

import nltk

%timeit nltk.clean_html(html)
was returning 153 us per loop

Nó hoạt động thực sự tốt để trả lại một chuỗi với HTML được kết xuất. Mô -đun NLTK này nhanh hơn cả HTML2TEXT, mặc dù có lẽ HTML2TEXT mạnh hơn.

Câu trả lời ở trên từ @del

betterHTML = html.decode(errors='ignore')
%timeit html2text.html2text(betterHTML)
%3.09 ms per loop

Đã trả lời ngày 5 tháng 11 năm 2013 lúc 17:53Nov 5, 2013 at 17:53

Hướng dẫn html to plain text python - html sang python văn bản thuần túy

PaulpaulPaul

6.9478 Huy hiệu vàng39 Huy hiệu bạc40 Huy hiệu đồng8 gold badges39 silver badges40 bronze badges

3

Mô tả dự án

Hướng dẫn html to plain text python - html sang python văn bản thuần túy

HTML2TEXT là một tập lệnh Python chuyển đổi một trang HTML thành văn bản ASCII đơn giản, dễ đọc. Tốt hơn nữa, ASCII cũng là dấu hiệu hợp lệ (định dạng văn bản-to-HTML).

Sử dụng:

def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
2

Quyền muaSự mô tả
def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
3
Hiển thị số phiên bản và lối ra của chương trình
def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
4,
def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
5
Hiển thị thông báo trợ giúp này và thoát
def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
6
Không bao gồm bất kỳ định dạng nào cho các liên kết
def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
7
Thoát khỏi tất cả các nhân vật đặc biệt. Đầu ra là ít dễ đọc, nhưng tránh các vấn đề định dạng trường hợp góc.
def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
8
Sử dụng các liên kết tham chiếu thay vì các liên kết để tạo Markdown
def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
9
Đánh dấu các khối được định dạng sẵn và mã với [mã] ... [/code]

Để biết danh sách đầy đủ các tùy chọn, hãy xem tài liệu

Hoặc bạn có thể sử dụng nó từ trong vòng

import html2text
html = open("foobar.html").read()
print html2text.html2text(html)
0:

>>> import html2text
>>>
>>> print(html2text.html2text("

Zed's dead baby, Zed's dead.

")) **Zed's** dead baby, _Zed's_ dead.

Hoặc với một số tùy chọn cấu hình:

>>> import html2text
>>>
>>> h = html2text.HTML2Text()
>>> # Ignore converting links from HTML
>>> h.ignore_links = True
>>> print h.handle("

Hello, world!") Hello, world! >>> print(h.handle("

Hello, world!")) Hello, world! >>> # Don't Ignore links anymore, I like links >>> h.ignore_links = False >>> print(h.handle("

Hello, world!")) Hello, [world](https://www.google.com/earth/)!

Ban đầu được viết bởi Aaron Swartz. Mã này được phân phối theo GPLV3.

Cài đặt thế nào

def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
1 có sẵn trên pypi https://pypi.org/project/html2text/

$ pip install html2text

Cách chạy bài kiểm tra đơn vị

tox

Để xem kết quả bảo hiểm:

def parse_text(contents_string)
    Newlines = re.compile(r'[\r\n]\s+')
    bs = BeautifulSoup.BeautifulSoup(contents_string, convertEntities=BeautifulSoup.BeautifulSoup.HTML_ENTITIES)
    txt = bs.getText('\n')
    return Newlines.sub('\n', txt)
0

Sau đó mở tệp

import html2text
html = open("foobar.html").read()
print html2text.html2text(html)
2 trong trình duyệt của bạn.

Tài liệu

Tài liệu sống ở đây

Tải tập tin

Tải xuống tệp cho nền tảng của bạn. Nếu bạn không chắc chắn nên chọn cái nào, hãy tìm hiểu thêm về việc cài đặt các gói.

Phân phối nguồn

Phân phối xây dựng

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

Điều này có thể đạt được với sự trợ giúp của phương thức html.escape () (đối với Python 3.4+), chúng ta có thể chuyển đổi chuỗi ASCII thành tập lệnh HTML bằng cách thay thế các ký tự ASCII bằng các ký tự đặc biệt bằng cách sử dụng HTML. Phương thức thoát (). Bằng phương pháp này, chúng ta có thể giải mã các thực thể HTML thành văn bản.html. escape() method(for Python 3.4+), we can convert the ASCII string into HTML script by replacing ASCII characters with special characters by using html. escape() method. By this method we can decode the HTML entities into text.

Làm cách nào để lưu HTML dưới dạng văn bản đơn giản?

Lưu trang web HTML dưới dạng tài liệu văn bản (mất mã HTML) ...
Nhấp lại tab Tệp, sau đó nhấp vào tùy chọn Lưu dưới dạng ..
Trong danh sách lưu xuống dưới dạng loại, chọn tùy chọn văn bản đơn giản (*. TXT).....
Nhấp vào nút Lưu để lưu dưới dạng tài liệu văn bản ..

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

Phương pháp này rất hữu ích nếu bạn chuyển đổi số lượng lớn một loạt các tệp HTML thành Markdown - chỉ lặp qua danh sách các tệp HTML và lưu chúng vào các tệp đánh dấu.Từ Markdownify Nhập Markdoify File = Open ("./ Hello-world. HTML", "R").đọc () html = markdownify (file, heading_style = "atx") in (html) ## ## Xin chào, thế giới!iterate over a list of HTML files and save them to Markdown files. from markdownify import markdownify file = open("./hello-world. html", "r"). read() html = markdownify(file, heading_style="ATX") print(html) ## ## Hello, World!

Làm cách nào để trích xuất tất cả văn bản từ một trang web trong Python?

Để trích xuất dữ liệu bằng cách sử dụng máy quét web với Python, bạn cần làm theo các bước cơ bản sau:..
Tìm URL mà bạn muốn cạo ..
Kiểm tra trang ..
Tìm dữ liệu bạn muốn trích xuất ..
Viết mã ..
Chạy mã và trích xuất dữ liệu ..
Lưu trữ dữ liệu theo định dạng cần thiết ..