2016-02-21 2 views
1

Ні! Почему пауки не просматривают страницы? Я использую правило ... Что я делаю неправильно? Он работает только на одной странице. Вот код:Scrapy не переваливает страницу

# -*- encoding: -*- 

class JobSpider(CrawlSpider): 
    name = 'superjob' 
    allowed_domains = ['superjob.ru'] 
    start_urls = [ 
     'http://www.superjob.ru/vacancy/search/?t%5B0%5D=4&sbmit=1&period=7' 
    ] 

    rules = [ 
     Rule(SgmlLinkExtractor(allow='/vacancy/search/?', 
           restrict_xpaths=(
            u'//a[@class="h_border_none"]/<span>следующая</span>')), 
      callback='parse', 
      follow=True), 
    ] 

    def parse(self, response): 
     hxs = HtmlXPathSelector(response) 
     titles = hxs.select(
       '//*[@id="ng-app"]/div[2]/div/div[2]/div/div[1]/div[2]/div/div/h2/a') 
     items = [] 
     for title in titles: 
      item = JobItem() 
      item['title'] = title.select('//h2/a/text()').extract() 
      items.append(item) 
     # return items 

ответ

1

5 вещей, чтобы исправить:

  • restrict_xpaths должен указывать на постраничный блок
  • callback следует называть parse()
  • использованием LinkExtractor, SgmlLinkExtractor осуждается
  • xpath() вместо select() aярлык
  • исправить выражение внутренней XPath - просто получить text()

Fixed версия:

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


class JobSpider(CrawlSpider): 
    name = 'superjob' 
    allowed_domains = ['superjob.ru'] 
    start_urls = [ 
     'http://www.superjob.ru/vacancy/search/?t%5B0%5D=4&sbmit=1&period=7' 
    ] 

    rules = [ 
     Rule(LinkExtractor(allow='/vacancy/search/\?', restrict_xpaths=u'//div[@class="Paginator_navnums"]'), 
      callback='parse_item', 
      follow=True), 
    ] 

    def parse_item(self, response): 
     titles = response.xpath('//*[@id="ng-app"]/div[2]/div/div[2]/div/div[1]/div[2]/div/div/h2/a') 
     for title in titles: 
      item = JobItem() 
      item['title'] = title.xpath('text()').extract() 
      yield item 
+0

Большое спасибо, теперь понял! – tetrafishka

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