Gor*_*ran 30 scrapy python-2.7 scrapyd
如何在Scrapy的parse()功能中获取请求URL ?我有很多网址start_urls,其中一些将我的蜘蛛重定向到主页,结果我有一个空项目.所以我需要item['start_url'] = request.url存储这些网址的东西.我正在使用BaseSpider.
Jag*_*agu 55
传递给parse()的'response'变量包含您想要的信息.你不应该覆盖任何东西.
例如.(编者)
def parse(self, response):
print "URL: " + response.request.url
Run Code Online (Sandbox Code Playgroud)
gus*_*idd 15
可以从响应对象访问请求对象,因此您可以执行以下操作:
def parse(self, response):
item['start_url'] = response.request.url
Run Code Online (Sandbox Code Playgroud)
您需要覆盖BaseSpider的make_requests_from_url(url) 函数以将start_url分配给项目,然后使用Request.meta 特殊键将该项目传递给parse函数
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
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
而不是将请求的 URL 存储在某处,并且抓取处理的 URL 的顺序与start_urls.
通过使用下面,
response.request.meta['redirect_urls']
Run Code Online (Sandbox Code Playgroud)
会给你重定向的列表,就像 ['http://requested_url','https://redirected_url','https://final_redirected_url']
要访问上面列表中的第一个 URL,您可以使用
response.request.meta['redirect_urls'][0]
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅doc.scrapy.org提到的:
重定向中间件
This middleware handles redirection of requests based on response status.
Run Code Online (Sandbox Code Playgroud)
请求经过(重定向时)的 URL 可以在redirect_urls Request.meta键中找到。
希望这对你有帮助
| 归档时间: |
|
| 查看次数: |
33104 次 |
| 最近记录: |