2017-06-18 4 views
1

私は、captchaがあると知っているすべてのアマゾンからデータを取り出す単純なスクリプトを持っているので、captchaが到着したときにページタイトルが 'Robot check'この状況では、ページtitle = 'Robot check'とメッセージ「ページがスクラップされない」が表示され、このページからデータが取得されない場合。そうでなければスクリプトを続行しますPythonの手作業でparse()のURLまたはURLを手動で要求する

しかし、私はyield scrapy.Request(response.url, callback=self.parse)の再リクエストで現在のURLを試していますが、成功しませんでした。私はちょうどresponse.urlを再度要求していると私は私がしなければならないと思うのでスクリプトを続行する必要がありますログファイルからresponse.urlを削除するので、傷つきやすいURLを覚えていないので、私は、再度同じURLを入力するか、またはresponse.urlに失敗したURLをマークする方法がある場合は、自動的に再度リクエストします。ここで

は簡単なスクリプトとstart_urlsは、同じフォルダ内のURLという名前の別のファイルに私はのURLからそれをインポートしているされているので、デフォルトScrapyにより、重複したリンクをフィルタリングしないようにするためにScrapyに知らせる

import scrapy 
import re 
from urls import start_urls 

class AmazondataSpider(scrapy.Spider): 
    name = 'amazondata' 
    allowed_domains = ['https://www.amazon.co.uk'] 
    def start_requests(self): 
     for x in start_urls: 
      yield scrapy.Request(x, self.parse) 

    def parse(self, response): 
     try: 
      if 'Robot Check' == str(response.xpath('//title/text()').extract_first().encode('utf-8')): 
       print '\n\n\n The ROBOT CHeCK Page This link is reopening......\n\n\n' 
       print 'URL : ',response.url,'\n\n' 
       yield scrapy.Request(response.url, callback=self.parse) 
      else: 
       print '\n\nThere is a data in this page no robot check or captcha\n\n' 
       pgtitle = response.xpath('//title/text()').extract_first().encode('utf-8') 
       print '\n\n\nhello', pgtitle,'\n\n\n' 
       if pgtitle == 'Robot check: 
        # LOGIC FOR GET DATA BY XPATH on RESPONSE 
     except Exception as e: 
      print '\n\n\n\n',e,'\n\n\n\n\n' 

答えて

3

を提出すでに訪問していて200 http_statusを受信した場合はリンクを訪問しません。

、あなたのケースでは

print '\n\n\n The ROBOT CHeCK Page This link is reopening......\n\n\n' 
print 'URL : ',response.url,'\n\n' 
yield scrapy.Request(response.url, callback=self.parse, dont_filter=True) 
dont_filter=True

を実行します。

関連する問題