【问题标题】:Web Scraping with cheerio Nodejs使用 Cheerio Nodejs 进行网页抓取
【发布时间】:2018-05-10 02:11:03
【问题描述】:

我正在尝试在MonsterIndia.com 上搜索零经验的工作,所以我使用cheerio 和nodejs 编写了以下代码,我观察到我可以通过像https://www.monsterindia.com/**php**-jobs.html 一样搜索php 工作但如果我想以零经验搜索 php 工作我不得不在网站上手动添加过滤器,但它没有反映在页面的 url 中,所以我该如何实现这一点,我是网络抓取的完整初学者,请帮助.

var request = require('request');
var cheerio = require('cheerio');
const context = "php";
function scraper(context){
    request('http://www.monsterindia.com/'+context+"-jobs.html", function (error, response, html) {
        if (!error && response.statusCode == 200) {
            console.log("Request Called");
            var $ = cheerio.load(html);
            var jobs = [];
            var json = {title : "", link:"", description:"", };
            $('a.title_in').each(function(i , element){


                console.log($(this).attr('title'));

            })
        } 
        if(error){
            console.log(error);
        } 

    });
}
scraper(context);

【问题讨论】:

  • 我会在页面的源代码中查看是否有 RSS 提要。这比刮掉它更容易。

标签: javascript node.js web-scraping cheerio


【解决方案1】:

您可以使用casperjs 库来实现您的目标。这是一个放置在其网站中的简单示例,用于使用 Google 搜索引擎搜索单词,然后获取放置在搜索结果第一页中的链接。

var links = [];
var casper = require('casper').create();

function getLinks() {
    var links = document.querySelectorAll('h3.r a');
    return Array.prototype.map.call(links, function(e) {
        return e.getAttribute('href');
    });
}

casper.start('http://google.fr/', function() {
   // Wait for the page to be loaded
   this.waitForSelector('form[action="/search"]');
});

casper.then(function() {
   // search for 'casperjs' from google form
   this.fill('form[action="/search"]', { q: 'casperjs' }, true);
});

casper.then(function() {
    // aggregate results for the 'casperjs' search
    links = this.evaluate(getLinks);
    // now search for 'phantomjs' by filling the form again
    this.fill('form[action="/search"]', { q: 'phantomjs' }, true);
});

casper.then(function() {
    // aggregate results for the 'phantomjs' search
    links = links.concat(this.evaluate(getLinks));
});

casper.run(function() {
    // echo results in some pretty fashion
    this.echo(links.length + ' links found:');
    this.echo(' - ' + links.join('\n - ')).exit();
});

【讨论】:

  • 我如何使用它来过滤具有0年经验的工作,因为像imdb一样,过滤器不会反映在url中,所以必须通过一些get或post请求来完成,据我所知,您正在使用 casper.js 来获取链接,这是我不想要的。
  • 你应该填写输入文本,如上例:this.fill('form[action="/search"]', { q: 'casperjs' }, true);
  • 详细的例子,你可以使用这个:docs.casperjs.org/en/latest/modules/casper.html#click
【解决方案2】:

最好的方法是在cheerio 中使用.filter() 函数,下面是我实现这样一个过滤器的代码。

var job = $('div.job-container').filter(function (i, el) {
 var exp = $(this).children('div.view-apply- 
  container').children('div.padding-top-5').children('div.col-md- 
  3.col-xs-3.col-lg-3').children('span.experience');
  if (!exp){
      return $('div.job-container');
  }
  else{
      exp = exp.text().charAt(0) === '0';
      return exp;
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多