2017-08-15 37 views
0

如何爲monster.com創建抓取工具來抓取所有頁面。對於「下一頁」鏈接,monster.com調用JavaScript函數,但scrapy不承認的JavaScript As you can see in the imageScrapy monster.com使用scrapy框架

這裏是我的代碼,它不工作的分頁:

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() 
     } 

回答

1

您的代碼拋出一個異常,因爲next_page_urllistresponse.urljoin方法需要一個字符串。接下來的頁面鏈接提取應該這樣寫:

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

(即替代extract()extract_first()

編輯:

沒有與next_page_url提取另一個問題。所有邏輯都是正確的,分頁工作正常,但下一頁鏈接僅適用於第一頁。它需要第一個a,但在第二頁上,也有上一頁頁面鏈接。修改下一個頁面的url提取到這一點:

next_page_url = response.css('ul.pager').xpath('//a[contains(text(), "Next")]/@althref').extract_first() 

現在正確地進行分頁通過所有頁面。

+0

感謝您指出這個錯誤,但我的擔心是不同的我想知道如何調用JavaScript函數或從JavaScript代碼中拉出HTML鏈接以通過我的抓取工具移動到下一頁。 謝謝 –

+0

@AshishKapil請參閱編輯答案。 –

+0

非常感謝Tomas,它成功地運作了。 :) –