Scrapy在解析时获取请求URL

时间:2013-11-19 20:07:28

标签: python-2.7 scrapy scrapyd

如何在Scrapy' parse()函数中获取请求网址?我在start_urls中有很多网址,其中一些网址将我的蜘蛛重定向到主页,因此我有一个空项目。所以我需要像item['start_url'] = request.url之类的东西来存储这些网址。我使用的是BaseSpider。

5 个答案:

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