2016-09-10 7 views
0

私は治療に取り組んでいます。私は要求ごとにプロキシを回転させ、私が持っているAPIからプロキシを取得したいのですが、それは単一のプロキシを返します。私は、次のしている治療機能内からのAPIへのリクエスト

request.meta['proxy'] = 'your.proxy.address'; 

:私は使用してそれを割り当てます

http://stackoverflow.com/questions/4710483/scrapy-and-proxies 

:私の計画はその後、プロキシを取得し、APIへのリクエストを行うに基づいてプロキシを設定するためにそれを使用することです:

class ContactSpider(Spider): 
    name = "contact" 

def parse(self, response): 

    for i in range(1,3,1): 
     PR= Request('htp//myproxyapi.com', headers= self.headers) 
     newrequest= Request('htp//sitetoscrape.com', headers= self.headers) 
     newrequest.meta['proxy'] = PR 

しかし、私はどのようにAPI要求を実行するためのSciCreationオブジェクトを使用するか分かりません。私はデバッグ中にPRリクエストへの応答を得ていません。別の関数でこれを行う必要がありますか?yield文を使うか、私のアプローチが間違っていますか?

答えて

1

別の関数でこれを実行し、yield文を使用する必要がありますか、私のアプローチが間違っていますか?

はい。 Scrapyはコールバックモデルを使用します。

  1. PRのオブジェクトをスクリーピングエンジンに戻す必要があります。
  2. PRの応答を解析し、そのコールバックでnewrequestを生成します。

簡単な例:

def parse(self, response): 
    for i in range(1,3,1): 
     PR = Request(
      'http://myproxyapi.com', 
      headers=self.headers, 
      meta={'newrequest': Request('htp//sitetoscrape.com', headers=self.headers),}, 
      callback=self.parse_PR 
     ) 
     yield PR 

def parse_PR(self, response): 
    newrequest = response.meta['newrequest'] 
    proxy_data = get_data_from_response(PR) 
    newrequest.meta['proxy'] = proxy_data 
    yield newrequest 

も参照してください:http://doc.scrapy.org/en/latest/topics/request-response.html#topics-request-response-ref-request-callback-arguments

関連する問題