1
soup = BeautifulSoup(''.join(html))
table = soup.find("table")
firstRow = table.contents[0]

for tr in firstRow:
  if 'Total' in tr:
    text = ''.join(tr.find(text=True))
    print(text)

有时表格元素包含文本链接而不是纯文本。在这种情况下,上面的 for 循环遍历所有单元格并且没有找到文本“Total”,因为它在里面 <a title="err">Total</a> 。如果有链接,如何修改循环以在链接中查找文本?

4

1 回答 1

1

调用您的迭代变量tr具有误导性。您正在遍历表格行;单个项目是tdth元素,或只是单元格。不是表格行。

查看 Beautiful Soup 文档,看起来您想要该string属性:

如果标签只有一个子标签,并且该子标签是 NavigableString,则该子标签可用作 .string ...如果标签的唯一子标签是另一个标签,并且该标签具有 .string,则认为父标签具有与它的孩子相同的 .string 。

所以:

for cell in firstRow:
    if "Total" in cell.string:
        # ...

如果这对您不起作用(即,除了字符串中的文本之外,单元格中还有您想要的内容)那么您想要做的是在测试“Total”之前获取表格单元格中的所有文本:

for cell in firstRow:
    text = "".join(cell.find_all(text=True))
    if "Total" in text:
        print(text)
于 2012-09-20T23:41:38.013 回答