Scrapy获取预重定位网址

时间:2017-11-14 15:47:06

标签: python scrapy scrapy-spider

我的爬虫运行没有麻烦,但我需要获取start_url而不是重定向的。

问题是我使用规则将参数传递给URL(比如field-keywords = xxxxx),最后得到正确的网址。

解析函数开始获取项目属性没有任何麻烦但是当我想要起始URL(真实的)时,它存储重定向的... ...

我试过了:

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

两者都返回最终的url(重定向的url)而不是start_url。

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

提前致谢。

2 个答案:

答案 0 :(得分:1)

使用Spider Middleware跟踪每个回复的起始网址:

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']

答案 1 :(得分:0)

你试过response.request.url吗?我个人会覆盖在{meta}中添加原始网址的start_requests方法,例如:

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

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

提取它