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

Posted

技术标签:

【中文标题】如何从 BeautifulSoup4 中的 html 标签中找到特定的数据属性?【英文标题】:How find specific data attribute from html tag in BeautifulSoup4? 【发布时间】:2014-08-03 13:50:10 【问题描述】:

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

例如,在 html 文档中使用这一行:

<ul data-bin="Sdafdo39">

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

【问题讨论】:

【参考方案1】:

更准确一点

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

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

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)]

【讨论】:

【参考方案2】:

您可以使用find_all 方法获取所有标签,并根据在其属性中找到的“data-bin”进行过滤,我们将得到实际的标签。那么我们就可以简单的提取出对应的值,像这样

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']

【讨论】:

【参考方案3】:

您可以使用gazpacho 解决这个问题,只需几行代码:

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

from gazpacho import Soup

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

然后你可以只搜索“ul”标签并提取href属性:

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

【讨论】:

以上是关于如何从 BeautifulSoup4 中的 html 标签中找到特定的数据属性?的主要内容,如果未能解决你的问题,请参考以下文章

用requests库和BeautifulSoup4库爬取新闻列表

如何在 python 中使用 beautifulsoup4 来抓取标签中的内容

如何使用python和beautifulsoup4循环抓取网站中多个页面的数据

Beautifulsoup4错误选择多个属性

使用python和beautifulsoup4抓取网页后重复数据

用beautifulsoup4从天才网站上抓取评论