gpt4 book ai didi

python - 如何使用 BeautifulSoup 从 HTML 段落中提取内容?

转载 作者:太空宇宙 更新时间:2023-11-03 19:36:50 27 4
gpt4 key购买 nike

我正在使用 BeautifulSoup 进行一些屏幕抓取。我的问题是这样的:我需要从段落中提取特定的内容。一个例子:

<p><b><a href="/name/abe">ABE</a></b> &nbsp; <font class="masc">m</font> &nbsp; <font class="info"><a href="/nmc/eng.php" class="usg">English</a>, <a href="/nmc/jew.php" class="usg">Hebrew</a></font><br />Short form of <a href="/name/abraham" class="nl">ABRAHAM</a>

在这一段中,我可以提取名称 ABE,如下所示:

for pFound in soup.findAll('p'):

print pFound


#will get the names
x = pFound.find('a').renderContents()
print x

现在我的问题是在同一段落中提取其他名称。

Short form of <a href="/name/abraham" class="nl">ABRAHAM</a>

仅当标签 a 前面带有文本“Short form of”时,我才需要提取此内容

关于如何做到这一点有什么想法吗?HTML 页面中有很多这样的段落,并非所有段落都有“Short form of”文本,它们可能在该位置包含一些其他文本。

我认为正则表达式和 findNext() 的某种组合可能有用,但我对 BeautifulSoup 不熟悉。结果浪费了很多时间。

如有任何帮助,我们将不胜感激。谢谢。

最佳答案

以下应该有效...:

htm = '''<p><b><a href="/name/abe">ABE</a></b> &nbsp; <font class="masc">m
</font>&nbsp; <font class="info"><a href="/nmc/eng.php" class="usg">English
</a>, <a href="/nmc/jew.php" class="usg">Hebrew</a></font><br />
Short form of <a href="/name/abraham" class="nl">ABRAHAM</a>'''

import BeautifulSoup

soup = BeautifulSoup.BeautifulSoup(htm)

for p in soup.findAll('p'):
firsta = True
shortf = False
for c in p.recursiveChildGenerator():
if isinstance(c, BeautifulSoup.NavigableString):
if 'Short form of' in str(c):
shortf = True
elif c.name == 'a':
if firsta or shortf:
print c.renderContents()
firsta = shortf = False

关于python - 如何使用 BeautifulSoup 从 HTML 段落中提取内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3169350/

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