如何在scrapy中获取原始的start_url(在重定向之前)

时间:2013-05-30 18:07:22

标签: python redirect web-scraping scrapy

我正在使用Scrapy抓取一些页面。我从excel表中获取start_urls,我需要将url保存在项目中。

class abc_Spider(BaseSpider):
   name = 'abc'
   allowed_domains = ['abc.com']         
   wb = xlrd.open_workbook(path + '/somefile.xlsx')
   wb.sheet_names()
   sh = wb.sheet_by_name(u'Sheet1')
   first_column = sh.col_values(15)
   start_urls = first_column
   handle_httpstatus_list = [404]

   def parse(self, response):
      item = abcspiderItem()
      item['url'] = response.url

问题是网址被重定向到其他网址(因此在响应网址中提供了其他内容)。如何获得我从excel获得的原始网址?

2 个答案:

答案 0 :(得分:17)

您可以在response.request.meta['redirect_urls']中找到所需内容。

引自docs

  

请求通过的URL(在重定向时)可以   可以在redirect_urls Request.meta键中找到。

希望有所帮助。

答案 1 :(得分:1)

这给了我原始的“referer URL”,即我的哪个 start_url 导致与此请求对象对应的 URL 被抓取:

req = response.request
req_headers = req.__dict__['headers']
referer_url = req_headers['Referer'].decode('utf-8')