提问人:Howard Zhu 提问时间:11/16/2023 更新时间:11/16/2023 访问量:31
无法使用 bs4 和 re 定位 html 标签
Not able to position the html tag with bs4 and re
问:
我正在尝试使用 BS4 来取消收入发布的公开文件,有一个名为“reconciliation(s)”的关键字,所以我尝试使用 Regex 进行搜索。我发现所有的 reconciliation 关键字都应该在某个 div 标签中,所以我将我的搜索函数设置为:,但不知何故,我发现返回的结果为空的情况,这是其中之一:for text_tag in soup.find_all('div', text=re.compile('(reconciliation)|(reconciliations)', re.IGNORECASE), recursive=True):
<div style="clear:both;max-width:100%;position:relative;">
<p style="font-family:'Times New Roman','Times','serif';font-size:10pt;line-height:1.19;text-align:center;margin:0pt;">
<font style="font-size:11pt;">
PENSKE AUTOMOTIVE GROUP, INC.
</font>
</p>
<p style="font-family:'Times New Roman','Times','serif';font-size:10pt;line-height:1.19;text-align:center;margin:0pt;">
<font style="font-size:11pt;">
Consolidated Non-GAAP Reconciliations
</font>
</p>
它位于带有单词协调的 div 标签下
我什么也没尝试,因为我不知道从哪里开始修复它......
答:
1赞
Dean Van Greunen
11/16/2023
#1
只需执行此操作,提供一个自定义函数,该函数将过滤 div 并仅返回将此值作为文本(小写)的 div
# imports
from bs4 import BeautifulSoup
# function to search in the divs
def contains_reconciliation(tag):
return 'reconciliation' in tag.text.lower()
# Search results
result_divs = soup.find_all(contains_reconciliation, 'div')
# do something with the results
for div in result_divs:
print(div)
根据您发布的 html 代码,您要搜索元素而不是font
div
# imports
from bs4 import BeautifulSoup
# function to search in the divs
def contains_reconciliation(tag):
return 'reconciliation' in tag.text.lower()
# Search results
result_fonts = soup.find_all(contains_reconciliation, 'font ')
# do something with the results
for font in result_fonts:
# you can get the parent div if thats what you are looking for
div = font.parent().parent()
print(div)
print(font)
评论
1赞
Howard Zhu
11/16/2023
是的,但遗憾的是数据非常不一致,其中一些在 p 或 b 或其他标签中,但我发现它们都在 underdiv 标签
2赞
Andrej Kesely
11/16/2023
#2
您可以使用:lambda:
from bs4 import BeautifulSoup
html_text = """\
<div style="clear:both;max-width:100%;position:relative;">
<p style="font-family:'Times New Roman','Times','serif';font-size:10pt;line-height:1.19;text-align:center;margin:0pt;">
<font style="font-size:11pt;">
PENSKE AUTOMOTIVE GROUP, INC.
</font>
</p>
<p style="font-family:'Times New Roman','Times','serif';font-size:10pt;line-height:1.19;text-align:center;margin:0pt;">
<font style="font-size:11pt;">
Consolidated Non-GAAP Reconciliations
</font>
</p>
</div>"""
soup = BeautifulSoup(html_text, "html.parser")
for text_tag in soup.find_all(
lambda tag: tag.name == "div" and "reconciliation" in tag.get_text().lower()
):
print(text_tag)
指纹:
<div style="clear:both;max-width:100%;position:relative;">
<p style="font-family:'Times New Roman','Times','serif';font-size:10pt;line-height:1.19;text-align:center;margin:0pt;">
<font style="font-size:11pt;">
PENSKE AUTOMOTIVE GROUP, INC.
</font>
</p>
<p style="font-family:'Times New Roman','Times','serif';font-size:10pt;line-height:1.19;text-align:center;margin:0pt;">
<font style="font-size:11pt;">
Consolidated Non-GAAP Reconciliations
</font>
</p>
</div>
评论
0赞
Howard Zhu
11/17/2023
非常感谢你,你是否也介意告诉我为什么我的原始代码不起作用?我正在尝试学习图书馆。
评论