网络爬虫 Nodejs

    xiaoxiao2021-03-25  120

       最近学Nodejs时候,就做了一个简单的网络爬虫来练下手,就是提取如下图博客主页的10条最新评论,

    要抓取网页信息首先要获取博客主页的HTML信息,使用http.get(options[, callback])方法获取信息,代码如下:

    http.get(url,function(res){ var html='' res.on('data',function(data){ html+=data }) res.on('end',function(){ console.log(html) }) }).on('error',function(){ console.log('获取失败!') }) 其中URL  为我的 博客主页,获取主页Html后,需要对信息进行挑选,在博客主页右键选择查看源码,可以找到所需信息如下:

    <div id="newcomments" class="panel"> <ul class="panel_head"><span>最新评论</span></ul> <ul class="panel_body itemlist"> <li> <a href="/ltg01/article/details/50492556#comments">opencv 数字识别详细教程</a> <p style="margin:0px;"><a href="/LTG01" class="user_name">LTG01</a>: @qq_37115869:已经发了 </p> </li> <li> <a href="/ltg01/article/details/50492556#comments">opencv 数字识别详细教程</a> <p style="margin:0px;"><a href="/qq_37115869" class="user_name">qq_37115869</a>: 求完整代码1652228009@qq.com </p> </li> <li> <a href="/ltg01/article/details/50492556#comments">opencv 数字识别详细教程</a> <p style="margin:0px;"><a href="/qq_37115869" class="user_name">qq_37115869</a>: 求分享源代码,谢谢!邮箱1652228009@qq.com </p> </li> <li> <a href="/ltg01/article/details/50492556#comments">opencv 数字识别详细教程</a> <p style="margin:0px;"><a href="/jerry_csdn_zhou" class="user_name">jerry_csdn_zhou</a>: 刚学习opencv,求楼主发一下源码307623854@qq.com 十分感谢,辛苦楼主了! </p> </li> <li> <a href="/ltg01/article/details/50492556#comments">opencv 数字识别详细教程</a> <p style="margin:0px;"><a href="/guanzenbin00" class="user_name">guanzenbin00</a>: 求源码,非常感谢 155293190@qq.com </p> </li> <li> <a href="/ltg01/article/details/50492556#comments">opencv 数字识别详细教程</a> <p style="margin:0px;"><a href="/dream_tianyi" class="user_name">dream_tianyi</a>: @dream_tianyi:楼主效率极高,谢谢,不胜感激~ </p> </li> <li> <a href="/ltg01/article/details/50492556#comments">opencv 数字识别详细教程</a> <p style="margin:0px;"><a href="/weixin_37725857" class="user_name">weixin_37725857</a>: 楼主,求源代码,菜鸟面临毕设,需要参考一下,感激不尽!1825011050@qq.com </p> </li> <li> <a href="/ltg01/article/details/50492556#comments">opencv 数字识别详细教程</a> <p style="margin:0px;"><a href="/dream_tianyi" class="user_name">dream_tianyi</a>: 楼主您好,我这段时间正好在解决一个OCR的小问题,对这方面不太了解,看了您的这篇文章,豁然开朗。能否... </p> </li> <li> <a href="/ltg01/article/details/50492556#comments">opencv 数字识别详细教程</a> <p style="margin:0px;"><a href="/heihahu" class="user_name">heihahu</a>: 楼主你好,正在opencv相关的东西,你的观点很清晰,我正在依照你的观点来实现程序,不过你那里有一个... </p> </li> <li> <a href="/ltg01/article/details/50492556#comments">opencv 数字识别详细教程</a> <p style="margin:0px;"><a href="/qq_37688955" class="user_name">qq_37688955</a>: 楼主,你的代码很清楚,很详细,受益匪浅,本人学生,最近在做这个相关的一个课程设计,希望楼主能发一份源... </p> </li> </ul> </div> </div>

    在做网页爬虫时候需要安装cheerio库, 了解更多cheerio其安装方法为   npm install   cheerio  若出现问题则参考 安装问题 ,安装好后

    通过Cheerio,我们需要把HTML document 传进去。

    这是首选:

    var cheerio = require('cheerio'), $ = cheerio.load('<ul id="fruits">...</ul>'); 获取关键信息代码如下: function filterChaper(html){ var $=cheerio.load(html) var chapters=$('#newcomments') var courseData=[] chapters.each(function(item){ var chapter =$(this) var videos=chapter.find('.panel_body').children('li') videos.each(function(){ var video=$(this).find('p') var videoTitle=video.text() courseData.push(videoTitle) }) }) return courseData }对10条评论进行遍历,获取信息后存在数组中,然后在打印出来代码如下

    function printCourseData(courseData){ courseData.forEach(function(item){ console.log(item) }) }如果想获取评论人的邮箱则可以通过正则表达式来匹配,

    var reg=/[a-zA-Z0-9]{1,10}@[a-zA-Z0-9]{1,5}\.[a-zA-Z0-9]{1,5}/; var value=reg.exec(item)若匹配到则value为数组形式,邮箱是第0个元素,若匹配不到则返回null, 完整代码如下 var http = require('http') var cheerio=require('cheerio') var url='http://blog.csdn.net/ltg01' http.get(url,function(res){ var html='' res.on('data',function(data){ html+=data }) res.on('end',function(){ var courseData=filterChaper(html) printCourseData(courseData) //console.log(html) }) }).on('error',function(){ console.log('获取失败!') }) function filterChaper(html){ var $=cheerio.load(html) var chapters=$('#newcomments') var courseData=[] chapters.each(function(item){ var chapter =$(this) var videos=chapter.find('.panel_body').children('li') videos.each(function(){ var video=$(this).find('p') var videoTitle=video.text() courseData.push(videoTitle) }) }) return courseData } function printCourseData(courseData){ courseData.forEach(function(item){ console.log(item) /*var reg=/[a-zA-Z0-9]{1,10}@[a-zA-Z0-9]{1,5}\.[a-zA-Z0-9]{1,5}/; var value=reg.exec(item) if(value!=null) {console.log(value[0])} else {console.log('无')} */ }) }运行效果如下

    转载请注明原文地址: https://ju.6miu.com/read-5155.html

    最新回复(0)