如何在Beautiful Soup中只获得id以某个值结尾的div?

时间:2017-02-11 19:46:37

标签: python web-scraping beautifulsoup

我有一个网页来源,里面有很多div和各自的id。

例如:

<div id="abc_answer">Some content</div>
<div id="abcd_answer">Some content</div>
<div id="ggg">Some Content</div>

我想只提取在所有给定div的id中具有“_answer”子字符串的信息。我想用beautifulsoup

做这件事

3 个答案:

答案 0 :(得分:3)

一种选择是使用.select() method并传入attribute selector [id$=_answer],这将选择id属性值以子字符串_answer结尾的元素:

soup.select('div[id$=_answer]')

输出:

> [<div id="abc_answer">Some answer</div>, <div id="abcd_answer">Some answer</div>]

答案 1 :(得分:3)

以下是解决方案:

bsObj = BeautifulSoup(some.text, "html.parser");
found = bsObj.findAll("div", id=lambda x: x and x.endswith('_answer'))

答案 2 :(得分:0)

您可以将函数传递给可以进行任何检查的find_all

soup.find_all(lambda tag:    tag.name=='div' \
                         and tag.has_attr('id') \
                         and tag['id'].endswith("_answer")))
#[<div id="abc_answer">Some content</div>, 
# <div id="abcd_answer">Some content</div>]

确保在查看其值之前检查id是否存在。