gpt4 book ai didi

python - find_all 没有在混合内容中找到文本

转载 作者:太空宇宙 更新时间:2023-11-04 05:56:20 25 4
gpt4 key购买 nike

我有一些使用 BeautifulSoup 的 Python 屏幕抓取代码,这让我很头疼。对 html 的一个小改动使我的代码中断,但我不明白为什么它无法工作。这基本上是 html 在解析时的外观演示:

soup=BeautifulSoup("""
<td>
<a href="https://alink.com">
Foo Some text Bar
</a>
</td>
""")
links = soup.find_all('a',text=re.compile('Some text'))
links[0]['href'] # => "https://alink.com"

升级后,a 标签体现在包含一个 img 标签,这使得代码中断。

<td>
<a href="https://alink.com">
<img src="dummy.gif" >
Foo Some text Bar
</a>
</td>

“链接”现在是一个空列表,所以正则表达式没有找到任何东西。我通过单独匹配文本来破解它,然后找到它的父级,但这似乎更脆弱:

links = soup.find_all(text=re.compile('Some text'))
links[0].parent['href'] # => "https://alink.com"

什么是添加img标签作为文本的兄弟内容打破了 BeautifulSoup 所做的搜索,并且在那里一种修改第一个代码的方法?

最佳答案

区别在于第二个例子有一个不完整的 img 标签:

应该是

<img src="dummy.gif" />
Foo Some text Bar

<img src="dummy.gif" > </img>
Foo Some text Bar

相反,它被解析为

<img src="dummy.gif" >
Foo Some text Bar
</img>

所以找到的元素不再是a,而是img,它的父元素是a

关于python - find_all 没有在混合内容中找到文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27575938/

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