如何在美丽的汤中使用find_all来同时匹配不同的类和属性?

问题描述 投票:0回答:1

我想创建一个元素结果集,其中将包含与2个条件匹配的所有条目:它们在一个类下的属性为“ col1”,而在另一类下的属性为“ 10.10”。 (一个集作为两个结果集的交集)

目前,我能够创建两个单独的结果集:

result1 = soup.find_all("textline", {"type" : "col1"}) #gives 600 results
result2 = soup.find_all("font", {"size" : "10.10"}) #gives 100 results

我想创建一个结果集,其中将仅包含满足两个条件的条目(交叉点)。

我尝试将两个属性都放在一个列表中,但只是将结果加在一起

result = soup.find_all(["textline", {"type" : "col1"}, "font", { "size" : "10.10"}]) #gives 700 results

我也尝试编写一个for循环,但是它返回与result1相同长度的列表(而不是result1和result2的交集)

a= []
for i in soup.find_all("textline", {"type" : "col1"}):
    result = i.find_all("font", { "size" : "10.10"})
    a.append(result)
python beautifulsoup attributes tags findall
1个回答
0
投票

我更喜欢使用.select()

.select()

输出:

from bs4 import BeautifulSoup
html = """<textline bbox="81.600,450.647,178.692,460.547" type="col1"><font face="Times-Italic" size="9.900">XeAchKit-Erlsiiirtntg. </font></textline> <textline bbox="57.800,410.347,151.488,420.391" type="col1"><font face="Times-Roman" size="10.10">1. Geographical entities </font></textline> """
soup = BeautifulSoup(html, 'lxml')
soup.select('textline[type="Col1"] font[size="10.10"]')
© www.soinside.com 2019 - 2024. All rights reserved.