Scrapy response.css的列表为空

Scrapy response.css的列表为空,css,scrapy,Css,Scrapy,需要从本页获取产品名称和价格吗 开始于 刮壳“ 我得到的结果是这个。 回应 我还使用了代理和用户代理,以确保没有任何阻塞 但是当我使用 response.css(“.c13VH6.c16H9d a”).css('::text').extract() 和 css(“.c16h9da::attr(title)”).extract() 我得到一张空白名单 在另一个站点上尝试了相同的方法,这是有效的 另外,我使用了一个Chrome CSS选择器小部件来获取CSS选择器 请告诉我哪里出错了。数据可能是动

需要从本页获取产品名称和价格吗

开始于

刮壳“

我得到的结果是这个。 回应

我还使用了代理和用户代理,以确保没有任何阻塞

但是当我使用

response.css(“.c13VH6.c16H9d a”).css('::text').extract() 和 css(“.c16h9da::attr(title)”).extract()

我得到一张空白名单 在另一个站点上尝试了相同的方法,这是有效的

另外,我使用了一个Chrome CSS选择器小部件来获取CSS选择器


请告诉我哪里出错了。

数据可能是动态加载的,因此您必须使用类似Splash或Selenium的内容来呈现页面,以使CSS表达式正常工作

当您转到页面源代码时,您可以看到产品数据存在于一个大的json文件中,因此我只需将json作为python字典加载,并从中获取您想要的数据:

import scrapy
import json


class LazadaSpider(scrapy.Spider):
    name = 'lazada'
    allowed_domains = ['lazada.com']
    start_urls = ['https://www.lazada.com.my/shop-smart-tvs/']

    def parse(self, response):
        script = response.xpath(
            "//script[starts-with(text(), 'window.pageData')]/text()"
        ).extract_first()
        first = script.index('{')
        last = len(script)
        products = json.loads(script[first:last])
        items = products['mods']['listItems']
        for item in items:
            name = item['name']
            price = item['price']
            yield {'name': name,
                   'price': price}


所以,这不是一个你只需提出请求,其他人就能解决的地方。请向我们展示您的代码,突出显示您卡在哪里以及哪些部件导致问题。