最近对爬虫很感兴趣,我们node.js也是可以写爬虫。所以写一个node爬虫系列,记录我的爬虫之路,感兴趣的同学可以跟着一起学。反正我也是刚开始学,我会从零基础的角度来写这个系列,自己也会慢慢去摸索然后分享给大家。如果对这个系列很感兴趣,不然收藏一下,我会不定期更新。如若有大佬看到文章中有写不对的地方,尽管指出,小弟感激不尽。
什么是爬虫
百度百科:
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫。
我个人简单理解为:通过程序,模拟人浏览网页的行为,然后收集网页的信息。这只是浅层意思,要深究的话里面的学问还蛮大的。熟悉网络的同学都知道,其实搜索引擎就是最大的爬虫。比如百度,你在百度首页输入node关键字,百度的爬虫机器人会根据关键字去各个网站收集信息,然后吧和关键字最紧密的网站给你显示出来。
爬虫可以用来干什么
爬虫可以来收集网站的数据信息,你可以用爬虫爬图片,爬取视频等等你想要爬取的数据,只要你能通过浏览器访问的数据都可以通过爬虫获取。
写一个最基本的爬虫
正题来了,如何通过node写一个爬虫呢?其实前面也说过,爬虫只不过是模拟我们人的行为,去浏览一个网站。既然这样,我们可以通过node,向服务器发送请求,服务器经过解析后发送给用户浏览器结果,我们就可以拿到网站的数据了。
- 如果通过node向服务器发送请求?
利用http模块
request
向一个网站发送请求。node.js reques模块详解
- 数据请求到如果展示?
fs模块,将请求会的数据写入一个文件里面node.js fs文件模块详解
直接上代码
const http = require('http'); // 导入http模块
const fs = require('fs'); // 导入fs模块
let url = 'http://nodejs.cn/download/' // 请求的网址
let req = http.request(url, res => { // 发送请求
console.log(res.statusCode) // 服务器的响应状态吗
if(res.statusCode === 404) { // 404 页面不存在,如果访问了一个不存在的页面,我们就停止程序
return console.log('不好意思,页面不存在', res.statusCode)
}
let str = ''
res.on('data', buffer => { // 拿到数据 存放在 str
str += buffer
});
res.on('end', () => { // 请求结束 此时已经拿到网站的数据
fs.writeFile('download.html', str, err => { // 吧 str 写入 download.html 里面
if(err) console.log('哎呀,写入失败!', err.message) // node是错误优先 如果写入失败就打印失败信息
console.log('恭喜你,获取网站成功!')
})
} )
res.on('error', e => { // 请求发生错误 比如 访问一个不存在的网站 错误的路径
console.log(e.message)
})
});
req.end() // 使用 http.request() 时,必须始终调用 req.end() 来表示请求的结束,即使没有数据被写入请求主体。
在命令行里面运行脚本,果然可以拿到数据,download里面也有网站数据。
image.png
总结
我们可以通过node自身模块,模拟人的行为浏览网站,拿到网站数据。但代码写到这里还有很多问题。
- 我如何获取网站这里面我想要的数据?
- 如果我想要获取图片、视频呢?
- 有的网站是
http
,有的网站是https
,http协议肯定是无法访问https的
代码已放置git仓库
爬虫之路还很长,还有很多问题需要解决,同志仍需努力!
更多文章访问个人博客:http://www.lfanliu.top
网友评论