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
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
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
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
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
3 | Hiển thị số phiên bản và lối ra của chương trình |
4, 5 | Hiển thị thông báo trợ giúp này và thoát |
6 | Không bao gồm bất kỳ định dạng nào cho các liên kết |
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. |
8 | Sử dụng các liên kết tham chiếu thay vì các liên kết để tạo Markdown |
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][//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 //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]
0Sau đó 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.