Рекурсивное сканирование не работает с Scrapy Spider

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

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>

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


person Niki    schedule 18.04.2016    source источник
comment
Вы когда-нибудь решали свою проблему?   -  person Steve    schedule 26.05.2016


Ответы (1)


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

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

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

person Steve    schedule 19.04.2016