首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python - web抓取-从类内部返回属性

python - web抓取-从类内部返回属性
EN

Stack Overflow用户
提问于 2016-04-05 14:39:20
回答 2查看 2.5K关注 0票数 2

我想从下面的html片段中返回‘数据页’的值(从整个页面中剪短)。

代码语言:javascript
复制
   <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‘。

代码语言:javascript
复制
s = soup.find('data-pages', attrs={'class': 'catalogPagination_dropdown'})
print s

有人能告诉我我做错了什么吗?从类中获得这个值的正确方法是什么?

另外,如果我想将它扩展到在整个站点中返回“数据页”的所有值,这将如何完成呢?

代码语言:javascript
复制
s = soup.find_all(.....) ?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-05 14:54:22

您需要从标记中提取属性:

代码语言:javascript
复制
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属性的标记,以防有些人没有:

代码语言:javascript
复制
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而不是我添加的数据页:

代码语言:javascript
复制
['97']
票数 0
EN

Stack Overflow用户

发布于 2016-04-05 14:46:15

如果你附加了更大的html片段,那就更好了。

如果标记的名称为select,则必须更改soup.find(..)中的属性,如果要获取属性值,则必须附加“数据页”。

试试这个:

代码语言:javascript
复制
s = soup.find('select', attrs={'class': 'catalogPagination_dropdown'})['data-pages']
print s
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36429538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档