美文网首页
node爬虫之路(一)

node爬虫之路(一)

作者: 隔壁老樊啊 | 来源:发表于2019-07-13 15:27 被阅读0次

    最近对爬虫很感兴趣,我们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

    相关文章

      网友评论

          本文标题:node爬虫之路(一)

          本文链接:https://www.haomeiwen.com/subject/bxxmkctx.html