2016-11-14 54 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下载,然后通过指定的回调处理它们的 响应。