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

标签 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 结构,这样我就可以将它们弹出到新电子邮件中并按原样发送。下面的解决方案适合我,因此我将其标记为已接受的答案。

感谢您的帮助!

最佳答案

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

我不确定你在做什么,但如果你想让它们全部成为一个str,你可以迭代Tag,调用str 对它们进行获取字符串表示,然后 join:

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

关于python - 将 Beautiful Soup find_all 列表合并为一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51754581/

相关文章:

python - 如何将 Perl 的包 'Nc*' 格式转换为 Python 的 struct.pack?

css - 单击按钮以使用 Selenium 加载其他元素后加载完整的 HTML

python - 在 Python 中使用 BeautifulSoup 获取具有特定类属性的链接的 href 文本

python - BeautifulSoup定位iframe及其属性

python - 了解 Beautiful Soup 中的 Find() 函数

python - Cython_bbox 和 lap 安装错误,#include "Python.h"not found

python - 将另一列的分钟数添加到 pyspark 中的字符串时间列

python - Pandas:如何在函数内将 sum() 或 mean() 分配给 df.groupby?

python - git log -- <file_name> 在终端上工作正常,但在 git python 中执行 g.log(file_name) 显示错误

html - 无法从 pdb 数据库网站抓取 <div id ="search-container">