2016-11-14 60 views
1

遞歸爬我已經集成scrapy濺在我CrawlerSpider process_request的規則是這樣的:scrapy濺不CrawlerSpider

​​

的問題是,抓取渲染只是網址在第一深度, 我也奇怪我怎麼能得到反應,即使有壞的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) 

在情況下,你不知道爲什麼這可能會返回這兩個項目和新的請求。下面是從文檔:https://doc.scrapy.org/en/latest/topics/spiders.html

在回調函數中,您解析響應(網頁),並用提取的數據,項目的對象返回 要麼類型的字典,的請求對象,或它們的 迭代對象。這些請求還將包含回調 (可能相同),然後將由Scrapy下載,然後通過指定的回調處理它們的 響應。