Python - BeautifulSoup:找到td宽度

时间:2016-09-18 06:49:03

标签: python html beautifulsoup

我有很多表,每个表都有这样的表数据标记:

<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)

任何帮助?

2 个答案:

答案 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)