专栏首页全栈者nodejs爬虫入门

nodejs爬虫入门

喜欢作者请关注作者的别忘了关注作者哦,期待您的关注!

本篇从零介绍一下爬虫,使用的技术以nodejs为基础。

爬虫是什么?

简单直观的总结一下,把已经在网络上的内容,请求获取后解析,让杂乱的数据变得仅仅有条,挖掘更大的意义。google和百度背后的搜索引擎就是巨大的网络爬虫。


实现爬虫的工具

能发起http请求的工具,在nodejs中你可以选择http模块的request方法或者get方法,或者使用第三方包superagent网页解析数据筛选。网页数据解析工具,在nodejs中,可以通过cherrio或者jsdom两个第三方包完成。


注意完整版本的代码请在github获取:https://github.com/FantasyGao/About_Node/tree/master/clawer


下面用三种方式去实现

1. http.get+cheerio+iconv-lite

这种方式还是比较简单的,容易理解,直接使用http的get方法进行请求url,将得到的内容给cheerio解析,用jquery的方式解析出我们要东西即可。

需要注意的是得到的结果中文乱码,要用iconv-lite模块将得到的内容进行转码即可。

http.get(options,function(result){
  var body = [];
  result.on('data',function(chunk){
     body.push(chunk);
  });
  result.on('end', function () {
     var html = iconv.decode(Buffer.concat(body), 'gb2312');  //注意这里body是数组
     var $ = cheerio.load(html);
     ...
  });
});

2. request+cheerio+iconv-lite

这种方式在获取内容的方式上与上有些不同,可以直接获取到Buffer类型的数据。然后将得到的内容给cheerio解析,用jquery的方式解析出我们要东西即可。

request(options,function(err,res,body){
  if(err)console.log(err);
  if(!err&&res.statusCode==200){
     var html = iconv.decode(body, 'gb2312');     //这里body是直接拿到的是Buffer类型的数据,可以直接解码。
     var $ = cheerio.load(html);
     ...
  }
});

3. superagent+cheerio+superagent-charset

这种方式是比前面两个有较大差别,用了superagent的get方法发起请求,解码的时候用到了superagent-charse,用法还是很简单的,之后再将获取到的内容给cheerio解析,用jquery的方式解析出我们要东西即可。

这里中文乱码可以使用superagent-charset模块进行转码,方式较之上面有点差别。

var charset = require("superagent-charset");
var superagent = charset(require("superagent"));   //将superagent模块传递给superagent-charset
...
superagent.get(url)
  .charset('gb2312')                                //用charset方法达到解码效果。
  .end(function(err,result){
     if(err) console.log(err);
     var $ = cheerio.load(result.text);
     ...
  });

总结一下

爬虫的实质就是发起请求,解析数据,无论用那个包,哪种方式都是一个目的。重在理解它要干什么,干了什么,怎么干的方式有很多种,其实nodejs并不适合去做这一类工作,只是为了学习使用它,像我们工作中更常用的是python去做爬虫自动化工作,相信大家理解了原理很快能上手。

如上内容均为自己总结,难免会有错误或者认识偏差,如有问题,希望大家留言指正,以免误人。有什么问题请留言,会尽力回答之。

本文分享自微信公众号 - 全栈者(fullStackEngineer),作者:TingRongGao

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • JS数组中那些你知道或不知道的

    鱼头注:NewTarget是啥?NewTarget是原生Class FunctionCallbackInfo(函数调用的callback上下文的信息)内的一个不...

    用户1462769
  • 看看你知道的“浅拷贝”是对的吗

    关于本篇文章的起源是一位大佬在面试的时候,询问应聘者关于浅拷贝的知识后,在应聘者的回答中,笔者发现有好一部分人对浅拷贝都是错误的,故有了此篇内容。

    用户1462769
  • 面向前端工程师的Nodejs入门手册

    数据库,网站系统最重要的部分之一,它好比一个人的大脑,可以记下开发者们想让它记下任何的事情,而且它比人脑更可靠更精准。

    用户1462769
  • 《Java从入门到失业》第四章:类和对象(4.6):类路径

           前面我们讨论过包,知道字节码文件最终都会被放到和包名相匹配的树状结构子目录中。例如上一节的例子:

    用户7801119
  • SVG绘图表格统计

    越陌度阡
  • 大会活动 | WAIC2020 司晓:一个“泛在智能”的世界正在加速到来

    7月10日,在世界人工智能大会腾讯论坛上,世界工程组织联合会主席、中国新一代人工智能发展战略研究院执行院长龚克、腾讯副总裁姚星、腾讯研究院院长司晓、腾讯优图实验...

    优图实验室
  • 全球云计算市场平稳增长 软件厂商纷纷出台云战略

    静一
  • 如何让超出块级元素的内容使用省略号代替?

    _simple
  • python开发_bisect

    ====================================================

    Hongten
  • 走近云计算(二):云计算的三种服务模式

    无论是使用哪一种云计算服务,服务商最终呈现到用户面前的,是一个颗粒化、可定制的产品列表,这样才能真正做到按需服务。打开腾讯云的官网,可以看到百余种产品服务,你的...

    jadeCarver

扫码关注云+社区

领取腾讯云代金券