通过BeautifulSoup获取属性值

时间:2015-06-12 13:16:13

标签: python html beautifulsoup html-parsing

我想通过 BeautifulSoup从内容中获取所有data-js属性值。

输入:

<p data-js="1, 2, 3">some text..</p><p data-js="5">some 1 text</p><p data-js="4"> some 2 text. </p>

输出:

['1, 2, 3', '5', '4']

我已经用lxml:

完成了它
>>> content = """<p data-js="1, 2, 3">some text..</p><p data-js="5">some 1 text</p><p data-js="4"> some 2 text. </p>"""
>>> import lxml.html as PARSER
>>> root = PARSER.fromstring(content)
>>> root.xpath("//*/@data-js")
['1, 2, 3', '5', '4']

我想通过BeautifulSoup获得上述结果。

3 个答案:

答案 0 :(得分:4)

我们的想法是找到包含data-js attributes的所有元素并将其收集到列表中:

from bs4 import BeautifulSoup


data = """
<p data-js="1, 2, 3">some text..</p><p data-js="5">some 1 text</p><p data-js="4"> some 2 text. </p>
"""

soup = BeautifulSoup(data)
print [elm['data-js'] for elm in soup.find_all(attrs={"data-js": True})]

打印['1, 2, 3', '5', '4']

答案 1 :(得分:3)

使用addBarDataToUi()而不是列表理解的快速方法。

map

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#find-all

答案 2 :(得分:2)

您可以使用find_all(),但必须将属性名称放在字典中,因为它不能单独用作关键字参数。

html = BeautifulSoup(content)
data = html.find_all(attrs={'data-js': True})

有关详细说明,请参阅here