Thank you very much Paul.

I've changed Rules callback to 'parsePage' and renamed def parse to def 
parsePage and now it doesnt enter in the parsePage(), it does nothing. Now 
the code looks like:

from scrapy.contrib.spiders import CrawlSpider, Rule
from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
from scrapy.selector import Selector
from scrapy import log
from urlparse import urlparse
from urlparse import urljoin
from scrapy.http import Request

class MySpider(CrawlSpider):
    name = 'testes2'
    allowed_domains = ['hoteis.pt']
    start_urls = [
        'http://www.hoteis.pt/pesquisa/filtro/?tipo=0&local=0'
    ]

    rules = 
(Rule(SgmlLinkExtractor(restrict_xpaths=('//a[@id="seguinte"]/@href')), 
callback='parsePage',follow=True),)

    def parsePage(self, response):
         sel = Selector(response)
         urls = sel.xpath('//div[@id="btReserve"]/../@href').extract()
         for url in urls:
          url = urljoin(response.url, url)
          self.log('URLS: %s' % url)
          yield Request(url, callback = self.parseLinks)
        
    def parseLinks(self, response):
    sel = Selector(response)
        titulo = sel.xpath('h1/text()').extract()
        morada = sel.xpath('//div[@class="MORADA"]/text()').extract()
        email = sel.xpath('//a[@class="sendMail"][1]/text()')[0].extract()
        url = sel.xpath('//div[@class="contentContacto 
sendUrl"]/a/text()').extract()
        telefone = 
sel.xpath('//div[@class="telefone"]/div[@class="contentContacto"]/text()').extract()
        fax = 
sel.xpath('//div[@class="fax"]/div[@class="contentContacto"]/text()').extract()
        descricao = sel.xpath('//div[@id="tbDescricao"]/p/text()').extract()
        gps = sel.xpath('//td[@class="sendGps"]/@style').extract()

        print titulo, email, morada

On Monday, January 13, 2014 4:56:11 PM UTC, Paul Tremberth wrote:
>
> Hi,
> I just replied to your StackOverflow question also.
> One problem is that you should not override CrawlSpider's parse method, 
> otherwise the default behaviour following rules and everything will not 
> happen.
>
> /Paul.
>
> On Monday, January 13, 2014 12:13:24 PM UTC+1, ajrpc wrote:
>>
>> Hello,
>>
>> I have set Rules to get the next pages from the start_url, but it's not 
>> working, it only crawls the start_urls page, and the links in that page 
>> (with parseLinks). It doesn't go to the next page set in Rules.
>>
>> any help ?
>>
>> from scrapy.contrib.spiders import CrawlSpider, Rule
>> from scrapy.contrib.linkextractors.sgml import SgmlLinkExtractor
>> from scrapy.selector import Selector
>> from scrapy import log
>> from urlparse import urlparse
>> from urlparse import urljoin
>> from scrapy.http import Request
>>
>> class MySpider(CrawlSpider):
>>     name = 'testes2'
>>     allowed_domains = ['hoteis.pt']
>>     start_urls = [
>>         'http://www.hoteis.pt/pesquisa/filtro/?tipo=0&local=0'
>>     ]
>>
>>     rules = 
>> (Rule(SgmlLinkExtractor(restrict_xpaths=('//a[@id="seguinte"]/@href')), 
>> follow=True),)
>>
>>     def parse(self, response):
>>          sel = Selector(response)
>>          urls = sel.xpath('//div[@id="btReserve"]/../@href').extract()
>>          for url in urls:
>>           url = urljoin(response.url, url)
>>           self.log('URLS: %s' % url)
>>           yield Request(url, callback = self.parseLinks)
>>         
>>     def parseLinks(self, response):
>>     sel = Selector(response)
>>         titulo = sel.xpath('h1/text()').extract()
>>         morada = sel.xpath('//div[@class="MORADA"]/text()').extract()
>>         email = sel.xpath('//a[@class="sendMail"][1]/text()')[0].extract()
>>         url = sel.xpath('//div[@class="contentContacto 
>> sendUrl"]/a/text()').extract()
>>         telefone = 
>> sel.xpath('//div[@class="telefone"]/div[@class="contentContacto"]/text()').extract()
>>         fax = 
>> sel.xpath('//div[@class="fax"]/div[@class="contentContacto"]/text()').extract()
>>         descricao = 
>> sel.xpath('//div[@id="tbDescricao"]/p/text()').extract()
>>         gps = sel.xpath('//td[@class="sendGps"]/@style').extract()
>>
>>         print titulo, email, morada
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"scrapy-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/scrapy-users.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to