使用beautifulsoup在定义的范围内查找标签

时间:2012-06-30 05:52:40

标签: python beautifulsoup

我使用beautifulsoup来提取数据。

我有这样一个html文件:

<div class=a>
<a href='google.com'>a</a>
</div>
<div class=b>
<a href='google.com'>c</a>
<a href='google.com'>d</a>
</div>

我想提取数据'c,d',我不需要

中的数据'a'

所以我这样做:

google_list = soup.findAll('a',href='google.com')
for item in google_list:
    print item.strings

它将打印a,c,d。 所以我的问题是如何在

中没有'a'的情况下打印'c','d'

2 个答案:

答案 0 :(得分:4)

您可以根据类div的{​​{1}}进行选择,然后在该标记上使用原始查询,以便查找其子项:< / p>

b

答案 1 :(得分:1)

几年前我停止使用Beautiful soup,并且更喜欢lxml库,其html解析器非常灵活,并且还允许xpath查询。

html = """<div class=a>
<a href='google.com'>a</a>
</div>
<div class=b>
<a href='google.com'>c</a>
<a href='google.com'>d</a>
</div>
"""
root = lxml.html.fromstring(html).getroottree()
root.xpath("//div[@class='b']/a[@href='google.com']/text()")
# ['c', 'd']

这会找到所有引用“google.com”的锚点中的所有文本,这些锚点位于任何具有“b”类的div中。