美汤如何用find_all同时匹配不同的类和属性?
How to match different classes and attributes simultaneously using find_all in beautiful soup?
我想创建一个元素结果集,其中将包含匹配 2 个条件的所有条目:它们在一个 class 下的属性将是 "col1",而它们在另一个 class 下的属性将是“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 循环,但它 returns 一个与 result1 长度相同的列表(而不是 result1 和 result2 的交集)
a= []
for i in soup.find_all("textline", {"type" : "col1"}):
result = i.find_all("font", { "size" : "10.10"})
a.append(result)
我更喜欢使用 .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"]')
输出:
[<font face="Times-Roman" size="10.10">1. Geographical entities </font>]
我想创建一个元素结果集,其中将包含匹配 2 个条件的所有条目:它们在一个 class 下的属性将是 "col1",而它们在另一个 class 下的属性将是“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 循环,但它 returns 一个与 result1 长度相同的列表(而不是 result1 和 result2 的交集)
a= []
for i in soup.find_all("textline", {"type" : "col1"}):
result = i.find_all("font", { "size" : "10.10"})
a.append(result)
我更喜欢使用 .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"]')
输出:
[<font face="Times-Roman" size="10.10">1. Geographical entities </font>]