Scrapy 获得预重定向 url

Scrapy get pre-redirect url

我有一个抓取工具 运行 没有问题,但我需要获取 start_url 而不是重定向的抓取工具。

问题是我正在使用规则将参数传递给 URL(如 field-keywords=xxxxx)并最终得到正确的 url.

解析函数开始毫无问题地获取项目属性,但是当我想要开始时 URL(真实的)它存储重定向的...

我试过:

response.url
response.request.meta.get('redirect_urls')

returns 最后的 url(重定向的)而不是 start_url。

有人知道为什么,或者有任何线索吗?

提前致谢。

你试过response.request.url了吗?我个人会重写 start_requests 方法,在元数据中添加原始 url,例如:

yield Request(url, meta={'original_request': url})

然后使用response.meta['original_request']

解压

使用 Spider Middleware 跟踪每个响应的开始 url:

from scrapy import Request

class StartRequestsMiddleware(object):

    start_urls = {}

    def process_start_requests(self, start_requests, spider):
        for i, request in enumerate(start_requests):
            request.meta.update(start_url=request.url)
            yield request

    def process_spider_output(self, response, result, spider):
        for output in result:
            if isinstance(output, Request):
                output.meta.update(
                    start_url=response.meta['start_url'],
                )
            yield output

跟踪 start_url 每个响应来自:

response.meta['start_url']