如何从 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循环抓取网站中多个页面的数据