如何在Scrapy' parse()
函数中获取请求网址?我在start_urls
中有很多网址,其中一些网址将我的蜘蛛重定向到主页,因此我有一个空项目。所以我需要像item['start_url'] = request.url
之类的东西来存储这些网址。我使用的是BaseSpider。
答案 0 :(得分:43)
传递给parse()的'response'变量包含您想要的信息。你不应该覆盖任何东西。
例如。 (修改)
def parse(self, response):
print "URL: " + response.request.url
答案 1 :(得分:14)
可以从响应对象访问请求对象,因此您可以执行以下操作:
def parse(self, response):
item['start_url'] = response.request.url
答案 2 :(得分:6)
您需要覆盖BaseSpider的make_requests_from_url(url)
function以将start_url分配给该项目,然后使用Request.meta
special keys将该项目传递给{ {1}}功能
parse
希望有所帮助。
答案 3 :(得分:3)
不是将请求的URL存储在某处,而是scrapy处理的URL与start_urls
中提供的序列不同。
使用下面的,
response.request.meta['redirect_urls']
会为您提供['http://requested_url','https://redirected_url','https://final_redirected_url']
要从上面的列表中访问第一个网址,您可以使用
response.request.meta['redirect_urls'][0]
有关详情,请参阅doc.scrapy.org提及:
<强> RedirectMiddleware 强>
This middleware handles redirection of requests based on response status.
可以在redirect_urls
Request.meta 键中找到请求经过的网址(在重定向时)。
希望这有助于你
答案 4 :(得分:1)
Python 3.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']