Tôi có chuỗi có chứa đánh dấu html như liên kết, văn bản in đậm, v.v.sử dụng python, Xóa thẻ HTML/định dạng khỏi chuỗi
Tôi muốn xóa tất cả các thẻ để tôi chỉ có văn bản thô.
Cách tốt nhất để làm điều này là gì? regex?
Tôi có chuỗi có chứa đánh dấu html như liên kết, văn bản in đậm, v.v.sử dụng python, Xóa thẻ HTML/định dạng khỏi chuỗi
Tôi muốn xóa tất cả các thẻ để tôi chỉ có văn bản thô.
Cách tốt nhất để làm điều này là gì? regex?
Nếu bạn đang sử dụng regex:
import re
def striphtml(data):
p = re.compile(r'<.*?>')
return p.sub('', data)
>>> striphtml('<a href="foo.com" class="bar">I Want This <b>text!</b></a>')
'I Want This text!'
Tùy thuộc vào việc các văn bản sẽ chứa '>' hoặc '<' Tôi sẽ hoặc là chỉ làm một chức năng để loại bỏ bất cứ điều gì giữa những, hoặc sử dụng một phân tích cú pháp lib
def cleanStrings(self, inStr):
a = inStr.find('<')
b = inStr.find('>')
if a < 0 and b < 0:
return inStr
return cleanString(inStr[a:b-a])
AFAIK sử dụng regex là một ý tưởng tồi cho phân tích cú pháp HTML, bạn sẽ khấm khá hơn sử dụng một phân tích cú pháp HTML/XML như beautiful soup.
+1 cho Súp đẹp – derekerdmann
Tôi đang sử dụng beautifulsoup, nhưng tôi cũng muốn có thể tách thẻ html theo cách thủ công. cảm ơn! – Blankman
@Blankman sẽ là một ý tưởng hay khi đề cập đến trong câu hỏi của bạn – volting
Sử dụng SGMLParser
. regex
hoạt động trong trường hợp đơn giản. Nhưng có rất nhiều sự phức tạp với HTML mà bạn không phải giải quyết.
>>> from sgmllib import SGMLParser
>>>
>>> class TextExtracter(SGMLParser):
... def __init__(self):
... self.text = []
... SGMLParser.__init__(self)
... def handle_data(self, data):
... self.text.append(data)
... def getvalue(self):
... return ''.join(ex.text)
...
>>> ex = TextExtracter()
>>> ex.feed('<html>hello > world</html>')
>>> ex.getvalue()
'hello > world'
Cảm ơn bạn, đã tìm kiếm một thời gian cho giải pháp như vậy không yêu cầu sự phụ thuộc bên ngoài. Thay đổi * ''. Join (ex.text) * thành * ''. Join (self.text) * làm cho nó phù hợp ngay cả khi là một lớp độc lập. – hasienda
Sử dụng lxml.html. Nó nhanh hơn rất nhiều so với BeautifulSoup và văn bản thô là một lệnh duy nhất.
>>> import lxml.html
>>> page = lxml.html.document_fromstring('<!DOCTYPE html>...</html>')
>>> page.cssselect('body')[0].text_content()
'...'
Giải pháp tuyệt vời, cảm ơn! Sử dụng đoạn mã này để trích xuất văn bản từ các đoạn HTML: 'lxml.html.fromstring ('một số đoạn HTML'). Text_content()' – Adam
Đây phải là câu trả lời được chấp nhận. Sử dụng regex để phân tích cú pháp HTML (đặc biệt là trực tiếp của internet) là một ý tưởng RẤT ** xấu **! –
này sẽ chỉ làm việc HTML đáng tin cậy trên cũng như hình thành (ví dụ, không được thoát '<' or '>' bên ngoài các thẻ thực tế, không có thẻ bị thay đổi như '
Vui lòng thêm rõ hơn về các tình huống rất hạn chế, đó sẽ là ý tưởng hay và tôi sẽ xóa bỏ phiếu bầu của mình. Cảm ơn bạn. – Trufa
cộng với điều này cũng sẽ xóa văn bản sau => "nếu 3 < 5 then 5 > 3" – Shaokan