循环中的 Scrapy 调用请求

Scrapy call request in a loop

我想删除一个包含带有过滤选项的组合框的网页。 基础 url 相同,但请求负载取决于所选的组合框值。我有一个可用选项列表,并且我创建了一个循环来遍历组合框值并执行请求。代码如下:

def parse_product_lines(self, response):
    options = json.loads(response.body_as_unicode())
    product_lines = options['products']

    for product_line in product_lines:
        payload = self.prepare_payload(product_line)

        scrapy.Request('http://example.com',
                       method="POST",
                       body=urllib.urlencode(payload),
                       callback=self.parse_items)

def parse_items(self, response):
    print response

,但没有执行请求。有人知道那里发生了什么吗?

首先,一个Spider class默认使用方法parse

每个回调应该 return 一个 Item 或一个 dict,或者一个迭代器。

你应该 yield request 在你的 parse_product_lines 方法中告诉 scrapy 处理下一个。

Scrapy 不会等待 Request 完成(像其他请求库一样),它会异步调用请求。

这些请求(和项目)由每个处理这些请求(回调)的方法处理,因为 scrapy 将这些方法作为 generators 并检查它们是项目还是请求,返回项目,并安排稍后通过其 callback 参数中指定的方法处理请求。

所以不要只调用Request,而是yield Request由scrapy安排。