我有很多表,每个表都有这样的表数据标记:
<td width="563" valign="top" bgcolor="#FFFF99" class="text">
...
<td width="12" bgcolor="#FFFF99" class="lettnav">
<td bgcolor="#FFFF99" class="lettnav">
目标是找出具有最高价值的<td>
。要做到这一点,首先我想使用beautifulsoap获取宽度的值(如果没有只打印空字符串)。
这是我到目前为止无效的代码段:
soup = BeautifulSoup(page, 'html.parser')
cells = soup.findAll("td",{"width": re.compile('\d')})
for aCell in cells:
width=aCell.find("width")
print(width)
任何帮助?
答案 0 :(得分:1)
要查找宽度最大的 td ,您可以在 find_all 返回的 td 列表中使用 max call,将密钥设置为key=lambda t: int(t["width"])
:
soup = BeautifulSoup(page, 'html.parser')
cells = soup.find_all("td", width=True)
mx_td = max(cells, key=lambda t: int(t["width"]))
t["width"]
访问属性值,我们需要在结果上调用 int ,否则将比较值lexicographically,即{{1将是真的。
答案 1 :(得分:0)
在BeautifulSoup属性中以dict表示法访问(有关详细信息,请参阅https://www.crummy.com/software/BeautifulSoup/bs4/doc/#attributes)。
使用width=aCell["width"]
您的代码可以运行:
for aCell in cells:
width=aCell["width"]
print(width)
如果你只对最大值感兴趣,你也可以省略for
循环并改为使用列表理解:
maxwidth = max(int(x["width"]) for x in cells)