2017-11-14 3 views
0

私はトラブルを起こさずに動作するクローラを持っていますが、私はstart_urlを取得する必要があり、リダイレクトされたものは取得しないでください。治療は事前リダイレクトURLを取得

問題は、(field-keywords = xxxxxのような)URLにパラメータを渡し、最終的に正しいURLを取得するためにルールを使用していることです。

解析機能を開始する項目は問題なく属性を取得しますが、私は(真1)を開始URLをしたいときには、

私がしようと試みてきた... 1リダイレクト格納します

response.url 
response.request.meta.get('redirect_urls') 

両方とも、最終URL(リダイレクトされたURL)を返しますが、start_urlは返しません。

何人かが知っているか、何か手掛かりがありますか?

ありがとうございます。

答えて

1

すべての応答から開始URLを追跡するためにSpider Middlewareを使用を使用してそれを抽出します。

from scrapy import Request 

class StartRequestsMiddleware(object): 

    start_urls = {} 

    def process_start_requests(self, start_requests, spider): 
     for i, request in enumerate(start_requests): 
      request.meta.update(start_url=request.url) 
      yield request 

    def process_spider_output(self, response, result, spider): 
     for output in result: 
      if isinstance(output, Request): 
       output.meta.update(
        start_url=response.meta['start_url'], 
       ) 
      yield output 

すべての応答が持つから来start_urlを追跡:

response.meta['start_url'] 
0

response.request.urlを試しましたか?私は個人的に、何かのメタの元のURLを追加することstart_requests方法オーバーライドします:

yield Request(url, meta={'original_request': url}) 

をそしてresponse.meta['original_request']

関連する問題