js 爬虫抓取网页数据(cheerio模块、request模块的基本流程推荐次数推荐(一))

优采云 发布时间: 2022-02-04 21:07

  js 爬虫抓取网页数据(cheerio模块、request模块的基本流程推荐次数推荐(一))

  在node.js中,配合cheerio模块和request模块,可以非常方便的抓取特定URL页面的数据。

  一个简单的如下

  var request = require('request');

  varcheerio = 需要('cheerio');

  请求(url,函数(err,res){

  if(err) return console.log(err);

  var $ =cheerio.load(res.body.toString());

  //解析页面内容

  });

  有了基本流程,现在试着找一个网址(url)。以博客园的搜索页面为例。

  通过搜索 关键词node.js

  

  获取以下网址:

  点击第二页,网址如下:

  分析 URL 并发现 w=?是 关键词 p=?是要搜索的页码。

  使用请求模块请求一个 URL

  var request = require('request');

  varcheerio = 需要('cheerio');

  var key = 'node.js', page = 1;

  var url = '#39;+ key +'&p='+ page;

  请求(url,函数(错误,res){

  if (err) return console.log(err);

  var $ =cheerio.load(res.body.toString());

  var arr = [];

  //内容解析

  });

  既然URL已经可用,接下来分析该URL对应的页面内容。

  

  页面还是很规整的。

  标题 摘要 作者 发帖时间 推荐 评论 浏览量 文章链接

  使用浏览器开发工具

  

  发现

  ...

  对应每个文章

  点击每一项,有以下内容

  

  class="searchItemTitle" 收录 文章title 和 文章URL 地址

  class="searchItemInfo-userName" 收录作者

  class="searchItemInfo-publishDate" 收录发布时间

  class="searchItemInfo-views" 收录视图

  借助cheerio模块解析文章,抓取具体内容

  

  

  var request = require('request');

  varcheerio = 需要('cheerio');

  var key = 'node.js', page = 1;

  var url = '#39;+ key +'&p='+ page;

  请求(url,函数(错误,res){

  if (err) return console.log(err);

  var $ =cheerio.load(res.body.toString());

  var arr = [];

  //内容解析

  $('.searchItem').each(function() {

  var title = $(this).find('.searchItemTitle');

  var author = $(this).find('.searchItemInfo-userName a');

  var time = $(this).find('.searchItemInfo-publishDate');

  var view = $(this).find('.searchItemInfo-views');

  变量信息 = {

  标题:$(title).find('a').text(),

  href: $(title).find('a').attr('href'),

  作者:$(author).text(),

  时间:$(time).text(),

  视图:$(view).text().replace(/[^0-9]/ig, '')

  };

  arr.push(信息);

  //打印

  console.log('===============================输出开始========== = =================');

  console.log(info);

  console.log('=============================== 输出结束========= == =================');

  });

  });

  查看代码

  你可以运行它看看数据是否被正常抓取。

  

  现在可以将数据数据保存到数据库中。这里以mysql为例,使用mongodb更方便。

  借助mysql模块保存数据(假设数据库名为test,表为blog)。

  

  

  

  var request = require('request');

  varcheerio = 需要('cheerio');

  var mysql = require('mysql');

  var db = mysql.createConnection({

  主机:'127.0.0.1',

  用户:'root',

  密码:'123456',

  数据库:“测试”

  });

  db.connect();

  var key = 'node.js', page = 1;

  var url = '#39;+ key +'&p='+ page;

  请求(url,函数(错误,res){

  if (err) return console.log(err);

  var $ =cheerio.load(res.body.toString());

  var arr = [];

  //内容解析

  $('.searchItem').each(function() {

  var title = $(this).find('.searchItemTitle');

  var author = $(this).find('.searchItemInfo-userName a');

  var time = $(this).find('.searchItemInfo-publishDate');

  var view = $(this).find('.searchItemInfo-views');

  变量信息 = {

  标题:$(title).find('a').text(),

  href: $(title).find('a').attr('href'),

  作者:$(author).text(),

  时间:$(time).text(),

  视图:$(view).text().replace(/[^0-9]/ig, '')

  };

  arr.push(信息);

  //打印

  console.log('===============================输出开始========== = =================');

  console.log(info);

  console.log('=============================== 输出结束========= == =================');

  //保存数据

  db.query('插入博客集?', info, function(err,result){

  如果(错误)抛出错误;

  如果(!!结果){

  console.log('插入成功');

  console.log(result.insertId);

  } 否则 {

  console.log('插入失败');

  }

  });

  });

  });

  查看代码

  运行并查看数据是否保存到数据库中。

  

  现在可以进行基本的抓取和保存。但是只爬取了一次,只有关键词为node.js页码的URL页面为1。

  把关键词改成javascript,页码为1,清空blog表,然后再次运行,看看能不能把javascript相关的数据保存到表中。

  

  现在去博客园搜索javascript,看看搜索结果是否与表格中的内容对应。呵呵,不看,肯定会对应~~

  只能爬取一页的内容,这肯定是不够的。自动爬取其他页面的内容会更好。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线