Python 2.7 Scrapy获取解析中的请求url
如何在Scrapy的Python 2.7 Scrapy获取解析中的请求url,python-2.7,scrapy,scrapyd,Python 2.7,Scrapy,Scrapyd,如何在Scrapy的parse()函数中获取请求url?我在start\u url中有很多URL,其中一些将我的爬行器重定向到主页,因此我有一个空项目。所以我需要像item['start\u url']=request.url这样的东西来存储这些url。我正在使用BaseSpider。您需要覆盖BaseSpider的从url(url)发出请求以将开始url分配给项目,然后使用请求.meta将该项目传递给解析函数 from scrapy.http import Request # ove
parse()
函数中获取请求url?我在start\u url
中有很多URL,其中一些将我的爬行器重定向到主页,因此我有一个空项目。所以我需要像item['start\u url']=request.url
这样的东西来存储这些url。我正在使用BaseSpider。您需要覆盖BaseSpider的从url(url)
发出请求以将开始url分配给项目,然后使用请求.meta
将该项目传递给解析
函数
from scrapy.http import Request
# override method
def make_requests_from_url(self, url):
item = MyItem()
# assign url
item['start_url'] = url
request = Request(url, dont_filter=True)
# set the meta['item'] to use the item in the next call back
request.meta['item'] = item
return request
def parse(self, response):
# access and do something with the item in parse
item = response.meta['item']
item['other_url'] = response.url
return item
希望能有所帮助。传递给parse()的“response”变量包含您想要的信息。你不需要覆盖任何东西 例如(编辑)
请求对象可以从响应对象访问,因此您可以执行以下操作:
def parse(self, response):
item['start_url'] = response.request.url
不是将请求的URL存储在某个地方,也不是按照
start\u URL
中提供的顺序进行处理
通过使用下面的
response.request.meta['redirect_urls']
将为您提供重定向事件列表,如['http://requested_url','https://redirected_url','https://final_redirected_url']
要访问上面列表中的第一个URL,您可以使用
response.request.meta['redirect_urls'][0]
有关更多信息,请参见以下内容: 重定向中间件
This middleware handles redirection of requests based on response status.
请求经过的URL(重定向时)可以在重定向\u URL
request.meta键中找到
希望这对您有所帮助Python3.5
Scrapy 1.5.0
from scrapy.http import Request
# override method
def start_requests(self):
for url in self.start_urls:
item = {'start_url': url}
request = Request(url, dont_filter=True)
# set the meta['item'] to use the item in the next call back
request.meta['item'] = item
yield request
# use meta variable
def parse(self, response):
url = response.meta['item']['start_url']
这种方法有效吗?在抓取过程中,您可以访问
请求的\u url
,而不是将它们存储在一边,检查下面的“我的回答”,但这不是请求url,而是响应url。Scrapy的中间件处理重定向,因此您可以获得不同的url.response.request.url如果url有重定向,那么它会提供重定向的url而不是提供的url我相信您所需要的是:redirect\u url=response.meta.get(“redirect\u url”)
from scrapy.http import Request
# override method
def start_requests(self):
for url in self.start_urls:
item = {'start_url': url}
request = Request(url, dont_filter=True)
# set the meta['item'] to use the item in the next call back
request.meta['item'] = item
yield request
# use meta variable
def parse(self, response):
url = response.meta['item']['start_url']