Python - 将bs4用于嵌套的html标记

时间:2017-03-19 22:24:41

标签: python html python-3.x beautifulsoup

我需要从此HTML代码中打印出美国和加拿大的字样:

<div class="txt-block">
    <h4 class="inline">Country:</h4>
    <a href="/search/title?country_of_origin=us&amp;ref_=tt_dt_dt" itemprop="url">USA</a>
    <span class="ghost">|</span>
    <a href="/search/title?country_of_origin=ca&amp;ref_=tt_dt_dt" itemprop="url">Canada</a>
</div>

如何用bs4获取单词?我用谷歌搜索了它,但我没有发现任何有用的东西。

3 个答案:

答案 0 :(得分:0)

如果这就是你所拥有的,你可以为每个标签使用get_text。 请试试这个

from bs4 import BeautifulSoup
html="""<div class="txt-block">
    <h4 class="inline">Country:</h4>
        <a href="/search/title?country_of_origin=us&amp;ref_=tt_dt_dt" itemprop="url">USA</a>
              <span class="ghost">|</span>
        <a href="/search/title?country_of_origin=ca&amp;ref_=tt_dt_dt" itemprop="url">Canada</a>
    </div>"""
soup = BeautifulSoup(html, 'html.parser')
[atag.get_text() for atag in soup.find_all('a')]

答案 1 :(得分:0)

要获取文本,以下代码将起作用:

from bs4 import BeautifulSoup
html_string = """<div class="txt-block">
    <h4 class="inline">Country:</h4>
        <a href="/search/title?country_of_origin=us&amp;ref_=tt_dt_dt" itemprop="url">USA</a>
              <span class="ghost">|</span>
        <a href="/search/title?country_of_origin=ca&amp;ref_=tt_dt_dt" itemprop="url">Canada</a>
    </div>"""

soup = BeautifulSoup(html_string)
print([node.string for node in soup.find_all('a', attrs={"itemprop" : "url"})] )

以上代码将导致:

[u'USA', u'Canada']

您可以参考BeautifulSoup Documentation here。它非常易于使用和直接使用。

此外,您在 lxml 的帮助下使用此操作,这比BeautifulSoup快一个数量级。

from lxml import html
html_string = """<div class="txt-block">
    <h4 class="inline">Country:</h4>
        <a href="/search/title?country_of_origin=us&amp;ref_=tt_dt_dt" itemprop="url">USA</a>
              <span class="ghost">|</span>
        <a href="/search/title?country_of_origin=ca&amp;ref_=tt_dt_dt" itemprop="url">Canada</a>
    </div>"""

root = html.fromstring(html_string)
print(root.xpath('//a[@itemprop="url"]//text()'))

这也将导致:

['USA', 'Canada']

答案 2 :(得分:0)

简单方法 findAll 可用于单独提取国家/地区名称。 这是Python 3中的解决方案代码:

from bs4 import BeautifulSoup
html ="""
<div class="txt-block">
    <h4 class="inline">Country:</h4>
    <a href="/search/title?country_of_origin=us&amp;ref_=tt_dt_dt" itemprop="url">USA</a>
    <span class="ghost">|</span>
    <a href="/search/title?country_of_origin=ca&amp;ref_=tt_dt_dt" itemprop="url">Canada</a>
</div>
"""
soup = BeautifulSoup(html,"html.parser")
for i in soup.findAll("a"):
    print(i.text)

执行上述代码将为您提供所需的结果:

USA
Canada