2014-11-24 74 views
0

为什么Scrapy只抓取start_urls然后停止?有没有办法让Scrapy爬过网站目录树中的所有页面,比如http://www.example.com/directory?或者,有没有办法让Scrapy更深入地抓住start_urls页面上的所有链接?Python Scrapy只抓取start_urls然后停止。如何更深入?

class DmozSpider(CrawlSpider): 
     name = "dmoz" 
     allowed_domains = ["dmoz.org"] 
     start_urls = [ 
         "http://www.dmoz.org/Computers/Programming/Languages/Python/Books/", 
         "http://www.dmoz.org/Computers/Programming/Languages/Python/Resources/" 
         ] 

     rules = [ 
       Rule(SgmlLinkExtractor(allow=('',)), follow=True), 
       Rule(SgmlLinkExtractor(allow=('',)), callback='parse_item') 
       ] 

     def parse_item(self, response): 
      print response.url 

     def parse(self, response): 
      print response.url 

下面是我的main.py文件中的代码:

dmozSpider = DmozSpider() 
spider = dmozSpider 

settings = get_project_settings() 

crawler = Crawler(settings) 
crawler.signals.connect(reactor.stop, signal=signals.spider_closed) 
crawler.configure() 
crawler.crawl(spider) 
crawler.start() 
log.start() 
reactor.run() 

回答

0

删除解析()在DmozSpider类,然后parse_item()将获得比start_urls

0

为了详细说明更多@ stevetronix的回答有点:

当使用CrawlSpider时,您不应该覆盖parse()方法。您应该在Rule中以不同的名称设置自定义callback
这里是从official documentation摘录:

当写抓取蜘蛛规则,应避免使用解析作为回调,由于 的CrawlSpider使用解析方法本身执行其逻辑。 因此,如果您重写解析方法,抓取蜘蛛将不再工作 。