2017-08-15 14 views
0

すべてのページをクロールするmonster.com用のクローラを作成するにはどうすればよいですか。 「次のページ」リンクの場合、monster.comは、JavaScript関数を呼び出しますが、scrapyはここscrape frameworkを使用してmonster.comをスクラップ

As you can see in the imageが、それはページネーションのための私のコード機能していませんjavascriptを認識しません:

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_urllistであり、response.urljoinメソッドが文字列を必要とするためです。

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

(すなわちextract_first()extract()を置き換え)

EDIT:

next_page_url抽出して、別の問題があり、次のページのリンク抽出は、次のように読んでください。すべてのロジックは正しいものであり、ページネーションは機能しますが、次のページリンクは最初のページでのみ機能します。最初にaが必要ですが、2番目のページにはの前にページリンクがあります。次のページのURL抽出を次のように変更してください。

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

これですべてのページが正しくページ設定されます。

+0

この間違いを指摘していただきありがとうございますが、私の懸念は異なっています。私はjavascript関数をどのように呼び出すことができますか、javascriptコードからhtmlリンクを引き出してクローラを介して次のページに移動できます。 ありがとうございました –

+0

@AshishKapil編集済みの回答を参照してください。 –

+0

Tomasさん、ありがとうございました。 :) –

関連する問題