如何合并两个漂亮的汤标签?

Posted

技术标签:

【中文标题】如何合并两个漂亮的汤标签?【英文标题】:How can I merge two beautiful soup tags? 【发布时间】:2016-06-02 13:53:29 【问题描述】:

我正在提取页面正文中出现的所有<ul> 标记,并连接紧接在它们之前的<p> 标记。

text = BeautifulSoup(requests.get('http://www.getspokal.com/how-to-create-content-based-on-your-customers-pain-points/', timeout=7.00).text)

我用美汤的函数来拉取合适的标签:

def funct(tag):
        return tag.name == 'ul' and not tag.attrs and not tag.li.attrs and not tag.a
ul_tags = text.find_all(funct)

这会拉出三个<ul> 标签。现在找到每个<ul>标签之前的<p>标签并连接:

combined = [(ul.find_previous("p") + ul) for ul in ul_tags]

这会产生一个错误

TypeError: unsupported operand type(s) for +: 'Tag' and 'Tag'

其中一个结果应该是这样的:

<p>For example, if you’re in the pet food industry, you might ask your existing customers:</p<ul><li>What challenges do you face on a regular basis with regards your pets?</li><li>Are there any underlying health issues that your pets have that causes you concern?</li><li>What is your biggest struggle when choosing appropriate food for your pet? </li></ul>

列表理解哪里出了问题?

【问题讨论】:

【参考方案1】:

您应该将列表理解更改为:

combined = [(str(ul.find_previous("p")) + str(ul)) for ul in ul_tags]

问题是ul不是字符串,实际上是bs4.element.Tag,所以必须先转换一下。

【讨论】:

以上是关于如何合并两个漂亮的汤标签?的主要内容,如果未能解决你的问题,请参考以下文章

试图用漂亮的汤从***上刮下一个季后赛支架。如何识别正确的列?

用漂亮的汤和熊猫刮桌子时如何保留链接

美丽的汤使用正则表达式查找标签?

如何使用漂亮的汤和重新找到包含特定文本的特定类的跨度?

如何用python和漂亮的汤从html代码中提取一个小时

用漂亮的汤处理 xml 的编码错误