2017-08-15 5 views
0

Wie kann ich einen Crawler für Monster.com zum Crawlen aller Seiten erstellen. Für die „nächste Seite“ Link, ruft monster.com eine Javascript-Funktion, aber scrapy erkennt nicht das Javascript As you can see in the imageKratzen Monster.com mit Scrapy-Framework

Hier ist mein Code, ist es nicht für die Paginierung Arbeit:

import scrapy 
class MonsterComSpider(scrapy.Spider): 
    name = 'monster.com' 
    allowed_domains = ['www.monsterindia.com'] 
    start_urls = ['http://www.monsterindia.com/data-analyst-jobs.html/'] 

    def parse(self, response): 
     urls = response.css('h2.seotitle > a::attr(href)').extract() 

     for url in urls: 
      yield scrapy.Request(url =url, callback = self.parse_details) 

    #crawling all the pages 

     next_page_url = response.css('ul.pager > li > a::attr(althref)').extract() 
     if next_page_url: 
      next_page_url = response.urljoin(next_page_url) 
      yield scrapy.Request(url = next_page_url, callback = self.parse)    


    def parse_details(self,response): 
     yield {   
     'name' : response.css('h3 > a > span::text').extract() 
     } 

Antwort

1

Ihr Code löst eine Ausnahme , weil next_page_url eine list und response.urljoin Methode eine Zeichenfolge benötigt. Auf der nächsten Seite Link-Extraktion sollte wie folgt lauten:

next_page_url = response.css('ul.pager > li > a::attr(althref)').extract_first() 

(das heißt extract() mit extract_first() ersetzt) ​​

EDIT:

Es gibt ein weiteres Problem mit next_page_url Extraktion. Die ganze Logik ist korrekt und Paginierung funktioniert, aber nächste Seite funktioniert nur für die erste Seite. Es dauert zuerst a, aber auf der zweiten Seite gibt es auch Vorherige Seitenverknüpfung. Ändern Sie die nächste Seite URL-Extraktion zu diesem:

Jetzt paginiert es richtig durch alle Seiten.

+0

Vielen Dank für den Hinweis auf diesen Fehler, aber meine Sorge ist anders Ich wollte wissen, wie kann ich die JavaScript-Funktion aufrufen oder den HTML-Link aus dem JavaScript-Code ziehen, um auf die nächste Seite über meinen Crawler zu bewegen. Danke –

+0

@AshishKapil Siehe bearbeitet Antwort bitte. –

+0

Vielen Dank Tomas, es hat erfolgreich funktioniert. :) –