2015-02-19 2 views
1

Я прочитал Scrapy: Follow link to get additional Item data? и пошел за ним, но он не работает, возможно, это простая ошибка, поэтому я помещаю исходный код моего Паука.Scrapy Spider не следующий Запрос обратного вызова

import scrapy 
from scrapy.spider import Spider 
from scrapy.selector import Selector 

class MySpider1(Spider): 
    name = "timeanddate" 
    allowed_domains = ["http://www.timeanddate.com"] 
    start_urls = (
     'http://www.timeanddate.com/holidays/', 
    ) 

    def parse(self, response): 
     countries = Selector(response).xpath('//div[@class="fixed"]//li/a[contains(@href, "/holidays/")]') 

     for item in countries: 

      link = item.xpath('@href').extract()[0] 
      country = item.xpath('text()').extract()[0] 

      linkToFollow = self.allowed_domains[0] + link + "/#!hol=1" 

      print link # link 
      print country # text in a HTML tag 
      print linkToFollow 

      request = scrapy.Request(linkToFollow, callback=self.parse_page2) 


    def parse_page2(self, response): 
     print "XXXXXX" 
     hxs = HtmlXPathSelector(response) 

     print hxs 

Я пытаюсь тоже получить список всех праздников в каждой стране, то есть то, что мне нужно, чтобы получить на другую страницу.

Я не могу понять, почему parse_page2 не вызывается.

+0

Вы никогда не возвращает запрос в 'синтаксический ' – Ngenator

+0

Я устал вернуть его, но и он не работает. Если у вас есть время, пожалуйста, покажите мне код с вашей идеей. – WebOrCode

+0

'yield request' после этого' request = scrapy.Request (...) 'line. – Ngenator

ответ

1

Я мог бы сделать свой пример работы с использованием Link Extractors

Вот пример:

#-*- coding: utf-8 -*- 
from scrapy.contrib.spiders import CrawlSpider,Rule 
from scrapy.contrib.linkextractors.lxmlhtml import LxmlLinkExtractor 

class TimeAndDateSpider(CrawlSpider): 
    name = "timeanddate" 
    allowed_domains = ["timeanddate.com"] 
    start_urls = [ 
     "http://www.timeanddate.com/holidays/", 
    ] 


    rules = (
      Rule (LxmlLinkExtractor(restrict_xpaths=('//div[@class="fixed"]//li/a[contains(@href, "/holidays/")]',)) 
       , callback='second_page'), 
      ) 

    #2nd page 
    def second_page(self,response): 
     print "second page - %s" % response.url 

будет продолжать пытаться сделать пример запроса обратного вызова для работы

+0

Я попробовал, и он не работает, даже с доходностью – WebOrCode

+0

Да, я прочитал его, теперь я пытаюсь просто перейти с одной страницы на другую, после чего я добавлю данные в Items. – WebOrCode

+0

Этот код работает. У меня есть один вопрос. В http://doc.scrapy.org/en/latest/topics/link-extractors.html#module-scrapy.contrib.linkextractors.sgml сказано, что SgmlLinkExtractor обесценивается. У вас есть особая причина, почему вы ее выбрали? – WebOrCode

Смежные вопросы