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

ibrsph3r  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(234)

我正在使用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

问题是URL被重定向到其他URL(因此在响应URL中给出了其他内容)。我如何获得从Excel中获得的原始URL?

62lalag4

62lalag41#

你可以在response.request.meta['redirect_urls']中找到你需要的东西。
引用自文档:
在redirect_urls Request. meta关键字中可以找到请求(在重定向时)经过的url。
希望能有所帮助。

tzdcorbm

tzdcorbm2#

这给了我原始的'referer URL',也就是说,我的start_urls中的哪一个导致了与这个被抓取的请求对象相对应的URL:

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

ibps3vxo3#

如果有人还在寻找答案-
对于Scrapy 2.6+版本
请使用-response.request.headers.get('Referer', None).decode("utf-8")
它会给予你原始的URL(最初是字节字符串,因此字符串转换)
更多信息-Scrapy request response

相关问题