首页 > 解决方案 > 如何从多个 HTML 标签中检索文本数据?

问题描述

我将以下 HTML 片段输出存储在名为contenttype的变量中bs4.element.Tag

<li class="item">
                                            Alpha-tocopherol
                                            <em>see</em>
<a href="https://medlineplus.gov/vitamine.html">Vitamin E</a>
</li>

str(content)输出:

'<li class="item">\n                                            Alpha-tocopherol\n                                            <em>see</em>\n<a href="https://medlineplus.gov/vitamine.html">Vitamin E</a>\n</li>'

我想使用 Python 作为输出:['Alpha-tocopherol', 'Vitamin E']. 我尝试了以下方法,但它是错误的:

regex = re.compile('(\w+\s+)\n')
regex.sub('', content.text).split()

标签: python-3.xregexweb-scrapingxpathbeautifulsoup

解决方案


您可以通过使用方法获取第一个标签.contents,然后使用该.find_next()方法搜索a标签。

from bs4 import BeautifulSoup

html = """
<li class="item">
Alpha-tocopherol
<em>see</em>
<a href="https://medlineplus.gov/vitamine.html">Vitamin E</a>
</li>
"""
soup = BeautifulSoup(html, "html.parser")

for tag in soup.find_all("li", class_="item"):
    print([tag.contents[0].strip(), tag.find_next("a").text])

输出:

['Alpha-tocopherol', 'Vitamin E']

推荐阅读