网站首页 > 开源技术 正文
喜欢作者请关注作者的别忘了关注作者哦,期待您的关注!
WeiXin Public Space:fullStackEngineer
本篇从零介绍一下爬虫,使用的技术以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去做爬虫自动化工作,相信大家理解了原理很快能上手。
如上内容均为自己总结,难免会有错误或者认识偏差,如有问题,希望大家留言指正,以免误人。有什么问题请留言,会尽力回答之。
欢迎关注我的WX Public Space:fullStackEngineer
猜你喜欢
- 2024-10-21 霸榜掘金!轻量级请求策略库 alova 出炉!
- 2024-10-21 对于现代 Web 应用除了美观要求之外,对产品体验度要求高
- 2024-10-21 5 个顶级的 JavaScript Ajax 组件和库
- 2024-10-21 用 async 模块控制并发数(async await并发)
- 2024-10-21 package-lock.json的作用?(package lock.json)
- 2024-10-21 为什么 JS 开发者更喜欢 Axios 而不是 Fetch?
- 2024-10-21 Node.js爬虫实战 - 爬你喜欢的(node爬取数据)
- 2024-10-21 node.js爬虫-校园网模拟登录(校园网模拟登陆)
- 2024-10-21 IMT星际云每周资讯-20190111(星际云官网)
- 2024-10-21 nodejs,express,koa爬虫实战(node网络爬虫)
欢迎 你 发表评论:
- 1596℃北京那些看上去很牛的车牌们!(北京厉害车牌)
- 1114℃2025年度视频去水印软件TOP5对比:哪款最值得用
- 600℃新疆话里的“虫子”
- 528℃中兴光猫 Telnet下设置大全(中兴光猫命令大全)
- 520℃蓝牙设备配对失败的系统性解决方案与技术解析
- 518℃未备份电脑文件数据恢复的七种方法
- 497℃工艺管道常用英文缩写 英汉对照
- 453℃是爱情啊!比伯分享度假照 与海莉礁石上甜蜜接吻
- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)

本文暂时没有评论,来添加一个吧(●'◡'●)