我想从下面的html片段中返回‘数据页’的值(从整个页面中剪短)。
<div class="catalogPagination" data-js-component="catalog-pagination/catalog-pagination">
<span class="catalogPagination_button catalogPagination_button-prev catalogPagination_button-disabled">
</span>
<div class="catalogPagination_label">
<select class="catalogPagination_dropdown" data-baseurl="/herrenbekleidung-shirts/?order=popularity" data-current="1" data-pages="97">
<option>
Seite 1 von 97
</option>
</select>我使用的是BeautifulSoup,每当我尝试使用soup.find()时,我的代码就会打印'None‘。
s = soup.find('data-pages', attrs={'class': 'catalogPagination_dropdown'})
print s有人能告诉我我做错了什么吗?从类中获得这个值的正确方法是什么?
另外,如果我想将它扩展到在整个站点中返回“数据页”的所有值,这将如何完成呢?
s = soup.find_all(.....) ?谢谢!
发布于 2016-04-05 14:54:22
您需要从标记中提取属性:
print([s["data-pages"] for s in soup.select("select.catalogPagination_dropdown") if s.has_attr("data-pages")])select.catalogPagination_dropdown将使用catalogPagination_dropdown类在整个页面中找到所有选择标记,如果它有我们想要的属性,只需提取data属性即可。
您还可以使用find_all,使用"data-pages": True只查找带有data-current属性的标记,以防有些人没有:
html = """ <div class="catalogPagination" data-js-component="catalog-pagination/catalog-pagination">
<span class="catalogPagination_button catalogPagination_button-prev catalogPagination_button-disabled">
</span>
<div class="catalogPagination_label">
<select class="catalogPagination_dropdown" data-baseurl="/herrenbekleidung-shirts/?order=popularity" data-current="1" data-pages="97">
<select class="catalogPagination_dropdown" data-baseurl="/herrenbekleidung-shirts/?order=popularity" data-current="1" foo="97">
<option>
Seite 1 von 97
</option>
</select>"""
soup = BeautifulSoup(html)
selects = soup.find_all("select", {"class": "catalogPagination_dropdown", "data-pages": True})
print([s["data-pages"] for s in selects])这将为您提供与示例html相同的select,但它忽略了select with foo而不是我添加的数据页:
['97']发布于 2016-04-05 14:46:15
如果你附加了更大的html片段,那就更好了。
如果标记的名称为select,则必须更改soup.find(..)中的属性,如果要获取属性值,则必须附加“数据页”。
试试这个:
s = soup.find('select', attrs={'class': 'catalogPagination_dropdown'})['data-pages']
print shttps://stackoverflow.com/questions/36429538
复制相似问题