【发布时间】:2018-07-13 05:26:27
【问题描述】:
我正在编写 scrapy 爬虫来从电子商务网站上抓取数据。 该网站有颜色变体,每个变体都有自己的价格、尺寸和该尺寸的库存。 要获取变体的价格、尺寸和库存,需要访问变体(颜色)的链接。 并且所有数据都需要在一条记录中。 我尝试过使用请求,但速度很慢,有时无法加载页面。
我已经使用requests.get() 编写了爬虫,并使用scrapy.selector.Selector() 中的响应并解析数据。
我的问题是,有什么方法可以使用 scrapy.Request() 来获取我在回调函数中使用它的响应。我需要在与下面相同的地方回复(如下所示),
response = scrapy.Request(url=variantUrl)
sizes = response.xpath('sizesXpath').extract()
我知道scrapy.Request() 需要名为callback=self.callbackparsefunction 的参数
当scrapy生成响应以处理生成的响应时,将调用它。我不想使用回调函数我想在当前函数中处理响应。
或者有什么方法可以将回调函数的响应返回到scrapy.Request()写如下的函数(如下所示),
def parse(self, response):
variants = response.xpath('variantXpath').extract()
for variant in variants:
res = scrapy.Request(url=variant,callback=self.parse_color)
# use of the res response
def parse_color(self, response):
return response
【问题讨论】:
-
你能解释一下为什么回调不是一个选项吗?
-
在我的情况下,回调不是选项,因为我不希望每个变体都作为单独的产品,我希望它作为一条记录的一部分,并且只有三个字段需要加载变体页面从第一页而不是从变体页面收集的更多字段,并且变体不仅是一个还会有两个以上,所以我不能使用可以通过请求传递的元数据
-
在for循环中,如果你在Request对象中传递meta,我认为每个Request都会在meta dict之上构建它的解析数据