2016-11-14 16 views
1

を再帰的にクロールしていない私はこのようなルールで私CrawlerSpiderのprocess一にscrapyスプラッシュを統合した:scrapyスプラッシュはCrawlerSpider

​​

問題はクロールがちょうど第1の​​深さにURLをレンダリングということです、 Iまた、悪いhttpコードやリダイレクトされた応答であっても、どのように応答することができますか?事前に

おかげで、

答えて

0

あなたの問題は、これに関連している可能性があり:要するにhttps://github.com/scrapy-plugins/scrapy-splash/issues/92

、あなたの解析コールバック関数にこれを追加しよう:

def parse_item(self, response): 
    """Parse response into item also create new requests.""" 

    page = RescrapItem() 
    ... 
    yield page 

    if isinstance(response, (HtmlResponse, SplashTextResponse)): 
     seen = set() 
     for n, rule in enumerate(self._rules): 
      links = [lnk for lnk in rule.link_extractor.extract_links(response) 
        if lnk not in seen] 
      if links and rule.process_links: 
       links = rule.process_links(links) 
      for link in links: 
       seen.add(link) 
       r = SplashRequest(url=link.url, callback=self._response_downloaded, 
               args=SPLASH_RENDER_ARGS) 
       r.meta.update(rule=rule, link_text=link.text) 
       yield rule.process_request(r) 

場合は、あなたが疑問に思いますなぜこれがアイテムと新しいリクエストの両方を返すのか? 、あなたは要求が、またはこれらの 反復可能なオブジェクト、応答(Webページ)を解析し、データを抽出し、項目オブジェクトと いずれかdictsを返すコールバック関数でhttps://doc.scrapy.org/en/latest/topics/spiders.html

:ここではドキュメントからですオブジェクト。これらのリクエストには、 (多分同じ)のコールバックが含まれ、Scrapyによってダウンロードされ、指定されたコールバックによって対応された レスポンスがダウンロードされます。