2016-04-18 3 views
0

Я пытался просканировать названия рецептов из пищевой сети, и я хочу рекурсивно перейти на следующую страницу. Я использую Python 3, поэтому некоторые функции Scrapy не доступны для меня, но вот то, что я до сих пор:Рекурсивное сканирование, не работающее с Scrapy Spider

import scrapy 
from scrapy.http      import Request 
from scrapy.contrib.spiders    import CrawlSpider, Rule 
from scrapy.linkextractors    import LinkExtractor 
from scrapy.selector     import Selector 
from scrapy.selector     import HtmlXPathSelector 
from testspider.items     import testspiderItem 
from lxml import html 

    class MySpider(CrawlSpider): 
     name  = "test" 
     allowed_domains = ["foodnetwork.com"] 
     start_urls = ["http://www.foodnetwork.com/recipes/aarti-sequeira/middle-eastern-fire-roasted-eggplant-dip-babaganoush-recipe.html"] 
     rules = (Rule(LinkExtractor(allow=(), restrict_xpaths=('//div[@class="recipe-next"]/a/@href',)), callback="parse_page", follow= True),) 

     def parse(self, response): 
      site = html.fromstring(response.body_as_unicode()) 
      titles = site.xpath('//h1[@itemprop="name"]/text()') 

      for title in titles: 
       item = testspiderItem() 
       item["title"] = title 
       yield item 

теги из источника веб-страницы являются:

<div class="recipe-next"> 
    <a href="/recipes/food-network-kitchens/middle-eastern-eggplant-rounds-recipe.html">Next Recipe</a> 
</div> 

Любая помощь будет оценил это!

+0

Вы когда-нибудь решали проблему? – Steve

ответ

0

CrawlSpider использует метод анализа самостоятельно, когда вы его переопределяете, все перестает работать, как ожидалось, see the docs. Цитирую документы

При написании правил обхода паука, избегать использования в качестве обратного вызова разобрана, так как CrawlSpider использует сам метод синтаксического анализа для реализации своей логики. Итак, если вы переопределите метод анализа, сканирование паука больше не будет работы.

Также ваш фрагмент кода не показывает источник для вашего метода parse_page().