我需要获得Scrapy蜘蛛当前处理的第一个URL,以将结果Map到它。更辣。如果用于抓取的URL是abc.de
,并且它被重定向到https://www.abc.de/en
,我想将https://www.abc.de/en
作为url
,将abc.de
作为initial_url
。我的代码是:
class SpiderTst(scrapy.Spider):
name = 'spider_tst'
start_urls = ['vrgroup.fi']
def parse(self, response):
tst_item = TstItem()
tst_item['url'] = response.url
...
tst_item['initial_url'] = response.request.url
yield tst_item
但是'url'和'initial_url'的值是相等的。
2条答案
按热度按时间polkgigr1#
如果您的初始起始URL不是一个具有适当方案的完整URI,那么真的没有办法通过请求和响应对象获得它,您最好的选择是评论中的超级用户建议。
但是,如果您的初始URL确实有一个方案,那么重定向链在响应 meta字典中可用。
要使用
scrapy shell
演示:jm2pwxwz2#
我按照@SuperUser的建议做了,因为@ Alexandria 提到的问题--在我的情况下,URL并不总是“满”的。因此,我将URL作为调用参数传递:
主解析函数的调用方式与传递初始URL作为附加参数的方式相同。要将参数传递给回调,您需要使用
functools.partial
,否则每次迭代都会传递相同的URL。