2017-06-18 35 views
1

我有一個簡單的腳本,從亞馬遜刮取數據,你都知道有一個驗證碼,所以當captcha到達頁面標題是'機器人檢查',所以我寫邏輯對於這種情況,如果頁面title = 'Robot check'和打印消息'頁面不被抓取,頁面上有驗證碼',並且不從該頁面獲取數據。否則繼續腳本。重新請求從python scrapy parse()中的URL或URL

但在if部分我試過yield scrapy.Request(response.url, callback=self.parse)重新請求當前的URL,但我沒有成功。我只需要做的是重新請求response.url並繼續腳本,因爲這是因爲我認爲我必須做的就是從日誌文件中刪除response.url,所以scrapy不記得網址爲抓取簡單我必須欺騙scrapy並請求再次相同的URL或可能是如果有方法將response.url標記爲失敗的網址,以便scrapy自動重新請求。

下面是一個簡單的腳本,start_urls是在同一個文件夾單獨命名的URL的文件,所以我必須從URL中導入它的文件

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

告訴Scrapy不過濾掉重複的鏈接,因爲默認情況下Scrapy如果已經訪問並且已經收到http_status 200,則不訪問該鏈接。

dont_filter=True

在你的情況,

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)