【问题标题】:Scrapy callback after redirect重定向后的 Scrapy 回调
【发布时间】:2014-09-14 14:07:50
【问题描述】:

我有一个非常基本的scrapy spider,它从文件中抓取网址然后下载它们。唯一的问题是其中一些被重定向到同一域内稍作修改的 url。我想使用 response.meta 在我的回调函数中获取它们,并且它适用于普通的 url,但随后 url 被重定向,回调似乎没有被调用。我该如何解决? 这是我的代码。

from scrapy.contrib.spiders import CrawlSpider
from scrapy import log
from scrapy import Request
class DmozSpider(CrawlSpider):
    name = "dmoz"
    handle_httpstatus_list = [302]
    allowed_domains = ["http://www.exmaple.net/"]) 
    f = open("C:\\python27\\1a.csv",'r')
    url = 'http://www.exmaple.net/Query?indx='
    start_urls = [url+row for row in f.readlines()]
    def parse(self, response):
            print response.meta.get('redirect_urls', [response.url])
            print response.status 
            print (response.headers.get('Location'))

我也尝试过类似的方法:

def parse(self, response):
         return Request(response.url, meta={'dont_redirect': True, 'handle_httpstatus_list':     [302]}, callback=self.parse_my_url)
def parse_my_url(self, response):
        print response.status 
        print (response.headers.get('Location'))

它也不起作用。

【问题讨论】:

    标签: python scrapy web-crawler


    【解决方案1】:

    默认情况下,scrapy 请求被重定向,但如果您不想重定向,您可以这样做,使用 start_requests 方法并在请求元中添加标志。

        def start_requests(self):
            requests =[(Request(self.url+u, meta={'handle_httpstatus_list': [302],
                                   'dont_redirect': True},         
                        callback=self.parse)) for u in self.start_urls]
            return requests
    

    【讨论】:

    • 不,我需要获取重定向的 url,在这种情况下它们很好。
    • 你可以从回调函数中获取它们,必须有在链接上移动或者你可以从标题下的位置获取url
    猜你喜欢
    • 2020-04-07
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多