首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提取scrapy中的类名

提取scrapy中的类名
EN

Stack Overflow用户
提问于 2018-02-09 02:30:08
回答 3查看 9.7K关注 0票数 6

我正在试着从trustpilot.com上刮掉评级。

可以使用scrapy提取类名吗?我试图抓取一个由五个单独的图像组成的评级,但这些图像在一个带有评级名称的类中,例如,如果评级是2,则开始:

代码语言:javascript
复制
<div class="star-rating count-2 size-medium clearfix">...

如果是3星,那么:

代码语言:javascript
复制
<div class="star-rating count-3 size-medium clearfix">...

那么,有没有一种方法可以在假设像.css('.star-rating')这样的选择器的情况下抓取count-2count-3类呢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-02-09 02:44:09

您可以在代码中的某处使用这两者的组合:

代码语言:javascript
复制
import re

classes = response.css('.star-rating').xpath("@class").extract()
for cls in classes:
    match = re.search(r'\bcount-\d+\b', cls)
    if match:
        print("Class = {}".format(match.group(0))
票数 5
EN

Stack Overflow用户

发布于 2018-02-09 08:17:22

您可以使用re_first()re()直接提取评级

代码语言:javascript
复制
for rating in response.xpath('//div[contains(@class, "star-rating")]/@class').re(r'count-(\d+)'):
    print(rating)
票数 3
EN

Stack Overflow用户

发布于 2018-10-18 06:54:37

我也有类似的问题。使用scrapy v1.5.1,我可以按名称提取元素的属性。下面是在Lowes上使用的一个示例;我对class属性执行了相同的操作

代码语言:javascript
复制
    for product in response.css('ul.product-cards-grid li.product-wrapper'):
        prod_href = p.css('li::attr(data-producturl)').extract()
        prod_name = p.css('li::attr(data-producttitle)').extract_first()
        prod_img  = p.css('li::attr(data-productimg)').extract_first()
        prod_id   = p.css('li::attr(data-productid)').extract_first()
票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48692446

复制
相关文章

相似问题

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