2017-04-14 11 views
-3

Requestメソッドを以下のScrapyというメソッドで使用しようとしていますが、callbackself.link_to_problemを呼び出すことはありません。 print pathと呼ぶと、ブラウザのURLを開こうとしたときにURLが正しく印刷されていて、フォーマットが正しいです。コードに何か問題があるかどうかを誰かが確認できますか?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

は、あなたのスクレーパーが投稿コードが正しい(と一見、それは私にはそう思える)しても動作しない可能性が非常に高いです。

理由/問題:reddit.comは、実際のブラウザのように見えるUser-Agentヘッダーセットを持たないすべてのクライアントの要求をブロックします。

デフォルトでは、スクラップはユーザーエージェントとして「scrapybot」を送信し、これによりブロックされます。

解決策:実際のブラウザのようにリクエストにUser-Agentヘッダーを設定します。

これは、あなたのscrapyプロジェクトのsettings.pyファイルに次の行を追加することで実行できます。

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

関連する問題