gpt4 book ai didi

Python BeautifulSoup - 防止特定的模糊/损坏标签匹配

转载 作者:行者123 更新时间:2023-11-28 03:15:36 37 4
gpt4 key购买 nike

我正在使用 Python 2.7.2 和 BeautifulSoup (bs4) 4.1.0。我在从页面的 html 中获取感兴趣的项目时遇到问题。我的直觉告诉我,问题在于存在“模糊”标签匹配,它将文本视为格式错误的标签。

这是一个简化的片段来说明我的问题:

from bs4 import BeautifulSoup
html = "<span>Age 4, Pet Dog, Weight < 6 lbs (< 3 kgs)</span>"

soup = BeautifulSoup(html, 'lxml')
print soup.get_text()
# prints: "Age 4, Pet Dog, Weight"

soup2 = BeautifulSoup(html, 'html.parser')
print soup2.get_text()
# prints "Age 4, Pet Dog, Weight < 6 lbs (< 3 kgs)"

更严格的 html.parser 给我感兴趣的文本;但是,该站点随机吐出损坏的 html。这些包含格式错误的 html 的页面会导致 HTMLParser.HTMLParseError。有没有办法获得我对使用 lxml 解析器感兴趣的完整行,或者该信息是否丢失?如果该信息丢失,是否有替代方案?

最佳答案

感谢可能重复的 Max Worg 链接,我得出的结论是输入文本在发送到 BeautifulSoup 之前必须“清理”。小于号<是html中的保留字符,应该转义为&lt;如果它在文本中使用。

我写了一个函数escape_lt()这利用了每个 <我想转义的那个后面有一个空格字符,所有其他 html 标签后面没有空格。

from bs4 import BeautifulSoup

def escape_lt(html):
html_list = list(html)
for index in xrange(0, len(html) - 1):
if html_list[index] == '<' and html_list[index + 1] == ' ':
html_list[index] = '&lt;'
return ''.join(html_list)

html = '<span>Age 4, Pet Dog, Weight < 6 lbs (< 3 kgs)</span>'
clean_html = escape_lt(html)
soup = BeautifulSoup(clean_html, 'lxml')
print soup.get_text()
# prints: Age 4, Pet Dog, Weight < 6 lbs (< 3 kgs)

关于Python BeautifulSoup - 防止特定的模糊/损坏标签匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28143376/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com