2017-04-14 65 views
-3

我正在嘗試使用下面的ScrapyRequest方法,但它不會調用callbackself.link_to_problem。 URL的所有印刷正確的,當我打電話print path,我也嘗試打開這些網址在我的瀏覽器和格式正確無誤。有人可以確定代碼中是否有問題?Python Scrapy請求方法不起作用

from scrapy.spiders import CrawlSpider, Rule 
from scrapy.linkextractors import LinkExtractor 
from scrapy.http.request import Request 
import scrapy 

def parse_item(self, response): 
    for link in response.xpath("//div[@id='siteTable']//div[@class='entry unvoted']/p[@class='title']/a/@href").extract(): 
     path = "https://www.reddit.com" + str(link) 
     print path 
     yield Request(path, callback=self.link_to_problem, errback = self.error_print) 

def link_to_problem(self, response): 
     print response 
     print "------------------------------------------------------------------------------------------" 
+0

是'link_to_problem'叫?你檢查過嗎?提問時也要小心謹慎。 – Mani

+0

沒有'link_to_problem'沒有被調用,我爲什麼認爲可能是我如何調用Request方法有問題。 –

+0

我看不出有什麼問題的代碼,請仔細查看項目設置和代碼。或者嘗試刪除errback。 – Mani

回答

1

即使發佈的代碼是正確的(乍一看似乎對我來說),您的刮板很可能無法正常工作。

原因/問題:有沒有User-Agent頭集,看起來像一個真正的瀏覽器的所有客戶端的reddit.com塊的請求。

Scrapy默認發送'scrapybot'作爲用戶代理,並將因此被阻止。

解決方案:在您的請求中設置User-Agent標頭,就像真正的瀏覽器所做的那樣。

這可以通過添加以下行到你scrapy項目的settings.py文件來完成。

USER_AGENT = 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0'