将Beautiful Soup find_all列表合并为一个元素

时间:2018-08-08 19:50:13

标签: python beautifulsoup

我创建了一个脚本,该脚本每周解析一次电子邮件,以查找特定电子邮件中的表格。我知道我想要带有特定类名的表标记中的内容。然后的目标是获取这些表,基本上在它们之间用
标记合并它们,并放入另一封电子邮件中,以每周自动发送一次。

到目前为止,我实际是实际的电子邮件抓取,最后是电子邮件的发送,但是我只是不知道如何将find_all的结果组合到一个元素中。我显然对不同的方法持开放态度,这就是为什么我提出这样的问题。

我需要的代码是:

def parse_messages(enhance_str):
    soup = BeautifulSoup(enhance_str, 'html.parser')
    table = soup.find_all('table', {'class': 'MsoNormalTable'})
    return table

这给了我一个类似列表的对象(我知道find_all子类列表),但是我知道的任何列表方法都不适用于该对象。我以为我可以做类似的事情

'<br/>'.join(table)

但这会引发属性错误。

我肯定有一个简单的答案,但我看不到。任何帮助是极大的赞赏。

编辑:为澄清起见,我只是试图保留这些表的html结构,因此我可以将它们弹出到新的电子邮件中并按原样发送。以下解决方案适用于我,因此将其标记为可接受的答案。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

soup.find_all的输出列表中的元素是bs4.element.Tag个对象,不是可以按原样连接在一起以创建字符串的某些对象。

我不确定您要做什么,但是如果您想使它们全部成为一个str,则可以遍历Tag,在它们上调用str获取字符串表示形式,然后获取join

'<br/>'.join([str(tag) for tag in table])