如何从BeautifulSoup4中的html标签中找到特定的数据属性?

时间:2014-06-13 04:50:40

标签: python html web-scraping beautifulsoup

有没有办法只使用html中的data属性来查找元素,然后获取该值?

例如,在html doc中包含此行:

<ul data-bin="Sdafdo39">

如何通过在整个html文档中搜索具有Sdafdo39属性的元素来检索data-bin

3 个答案:

答案 0 :(得分:17)

更准确一点

[item['data-bin'] for item in bs.find_all('ul', attrs={'data-bin' : True})]


这样,迭代列表只有具有您要查找的attr的ul元素

from bs4 import BeautifulSoup
bs = BeautifulSoup(html_doc)
html_doc = """<ul class="foo">foo</ul><ul data-bin="Sdafdo39">"""
[item['data-bin'] for item in bs.find_all('ul', attrs={'data-bin' : True})]


答案 1 :(得分:5)

您可以使用find_all方法获取基于&#34; data-bin&#34;的所有标记和过滤在其属性中找到将获得我们获得它的实际标签。然后我们可以简单地提取与其对应的值,如此

from bs4 import BeautifulSoup
html_doc = """<ul data-bin="Sdafdo39">"""
bs = BeautifulSoup(html_doc)
print [item["data-bin"] for item in bs.find_all() if "data-bin" in item.attrs]
# ['Sdafdo39']

答案 2 :(得分:0)

您可以使用gazpacho在几行中解决此问题:

首先,导入html并将其变成Soup对象:

from gazpacho import Soup

html = """<ul data-bin="Sdafdo39">"""
soup = Soup(html)

然后,您只需搜索“ ul”标签并提取href属性:

soup.find("ul").attrs["data-bin"]
# Sdafdo39