2017-08-15 39 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,它成功地运作了。 :) –