Scrapy response.css的列表为空
需要从本页获取产品名称和价格吗 开始于 刮壳“ 我得到的结果是这个。 回应 我还使用了代理和用户代理,以确保没有任何阻塞 但是当我使用 response.css(“.c13VH6.c16H9d a”).css('::text').extract() 和 css(“.c16h9da::attr(title)”).extract() 我得到一张空白名单 在另一个站点上尝试了相同的方法,这是有效的 另外,我使用了一个Chrome CSS选择器小部件来获取CSS选择器Scrapy response.css的列表为空,css,scrapy,Css,Scrapy,需要从本页获取产品名称和价格吗 开始于 刮壳“ 我得到的结果是这个。 回应 我还使用了代理和用户代理,以确保没有任何阻塞 但是当我使用 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}
所以,这不是一个你只需提出请求,其他人就能解决的地方。请向我们展示您的代码,突出显示您卡在哪里以及哪些部件导致问题。