node爬虫之路(一)

2019-07-13  本文已影响0人  隔壁老樊啊

最近对爬虫很感兴趣,我们node.js也是可以写爬虫。所以写一个node爬虫系列,记录我的爬虫之路,感兴趣的同学可以跟着一起学。反正我也是刚开始学,我会从零基础的角度来写这个系列,自己也会慢慢去摸索然后分享给大家。如果对这个系列很感兴趣,不然收藏一下,我会不定期更新。如若有大佬看到文章中有写不对的地方,尽管指出,小弟感激不尽。

什么是爬虫

百度百科:
网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、自动索引、模拟程序或者蠕虫

我个人简单理解为:通过程序,模拟人浏览网页的行为,然后收集网页的信息。这只是浅层意思,要深究的话里面的学问还蛮大的。熟悉网络的同学都知道,其实搜索引擎就是最大的爬虫。比如百度,你在百度首页输入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://www.lfanliu.top

上一篇下一篇

猜你喜欢

热点阅读