Nodejs书写爬虫工具

看了几天的nodejs,的确是好用,全当是练手了,就写了一个爬虫工具。

爬虫思路都是一致的,先抓取页面数据,然后分析页面,获取到所需要的数据,最后获得这些数据,是写入到硬盘,还是显示到网页,自己看着办。

其中最难的是分析页面,如果不用其他工具,那就只能用正则表达式来分析了。这里采用cheerio这个模块,这个很好用,不要有抵触心理(因为刚开始我比较抵触这个,想不用任何别的东西,结果自己搞崩了,还是用了它)。cheerio网上介绍很多,它可以根据div,根据class ,href等html标签,获取里面的数据。

这次是抓的本人博客首页( http://www.cnblogs.com/juepei/ )的文章标题,希望站长别生气,实地演练么。

先说下如何得到这个页面下的数据。

代码如下,简单的一比(不过nodejs写出来的东西本来就很简洁):

  request(url,function(error,res,body){
                if(!error && res.statusCode == 200){
                     console.log(body);
                }
        });
    

body就是数据了,

然后开始分析下数据。

查看首页文章部分代码,如下:

<div class="day">
    <div class="dayTitle">
        <a id="homepage1_HomePageDays_DaysList_ctl00_ImageLink" href="http://www.cnblogs.com/juepei/archive/2015/01/09.html">2015年1月9日</a>
    </div>

            <div class="postTitle">
                <a id="homepage1_HomePageDays_DaysList_ctl00_DayList_TitleUrl_0" class="postTitle2" href="http://www.cnblogs.com/juepei/p/4212595.html">git常用命令</a>
            </div>
            <div class="postCon"><div class="c_b_p_desc">摘要: (1)git branch 查看本地分支(2)git branch -a 查看远程分支(3)git checkout branchname 切换分支 (4)git add yourfile (5)git commit -a -m &quot;描述&quot; 提交你当前开发到暂存区,可以理解为你本...<a href="http://www.cnblogs.com/juepei/p/4212595.html" class="c_b_p_desc_readmore">阅读全文</a></div></div>
            <div class="clear"></div>
            <div class="postDesc">posted @ 2015-01-09 10:06 薛定谔的猫_ 阅读(4) 评论(0)  <a href ="http://i.cnblogs.com/EditPosts.aspx?postid=4212595" rel="nofollow">编辑</a></div>
            <div class="clear"></div>

</div>
.....

很多文章么,都是上面那些东西的循环。

我想要的东西在这里:

<div class="postTitle">
                <a id="..." class="postTitle2" href="http://www.cnblogs.com/juepei/p/4212595.html">git常用命令</a>
            </div>

它在<div class=‘postTitle‘>里面包着。要取出它,这时候cheerio就大显身手了,此处建议看下cheerio的api。

代码如下:

 var $=cheerio.load(body);
$(‘div‘).filter(function(i,e){
                                if($(this).attr(‘class‘)===‘postTitle‘){
                                        console.log($(this).text().trim());
                                }
                        });

这里用div来定位,这样就可以获取到数据了。代码就这么简单。

之后可以随意处置拿到的数据了,我这里是存到了本地的文本文档中。中间用数组转存了一下数据

全部代码如下:

var fs=require(‘fs‘);
var buffer=require(‘buffer‘);

var url=‘http://www.cnblogs.com/juepei/‘;
var result=new Array();
function getDatas(){
        request(url,function(error,res,body){
                if(!error && res.statusCode == 200){
                        var $=cheerio.load(body);
                        var j=0;
                        $(‘div‘).filter(function(i,e){
                                if($(this).attr(‘class‘)===‘postTitle‘){
                                        j++;
                                        //console.log($(this).text().trim());
                                        result.push($(this).text().trim());
                                }
                        });
                        console.log(result.toString());
                        fs.appendFile(‘/home/wang/data.txt‘,result.toString(),function(err){
                                if(err){
                                        console.log(‘file:‘+err);
                                }else{
                                        console.log(‘write ok‘);
                                }
                        });
                }
                else{
                        console.log(error);
                }
        });
}

getDatas();

运行一下这段代码,/home/wang目录下就有data.txt生成了,网页编码是utf8的,系统环境也是utf8,所以没有乱码的产生,如果是其他系统,编码不一样,处理下编码。

至此,大功告成。ps:本人也学习了几天nodejs,刚开始比较纠结,找不到好资料,感觉举步为艰。希望大家多看api,这个才是正路。

时间: 2024-10-11 03:23:12

Nodejs书写爬虫工具的相关文章

简单实现nodejs爬虫工具

约30行代码实现一个简单nodejs爬虫工具,定时抓取网页数据. 使用npm模块 request---简单http请求客户端.(轻量级) fs---nodejs文件模块. index.js var request = require('request'); var fs = require("fs"); var JJurl = "https://recommender-api-ms.juejin.im/v1/get_recommended_entry?suid=6bYFY7I

小米范工具系列之十四:小米范网站批量爬虫工具

小米范网站批量爬虫工具,是一款针对大量网站进行快速爬取的工具,爬取的URL可进一步调用wvs.sqlmap.brutexss等工具进行检测. 工具使用方法: 1.点击新建任务,输入要检测的URL. 2.设置子域名白名单,属于白名单域名的URL则自动保留并进行抓取. 2.设置并发站点.并发线程等参数,点击开始即可. 下载地址:http://pan.baidu.com/s/1pLjaQKF  文件名 XmfSpider

NodeJS制作爬虫全过程

这篇文章主要介绍了NodeJS制作爬虫的全过程,包括项目建立,目标网站分析.使用superagent获取源数据.使用cheerio解析.使用eventproxy来并发抓取每个主题的内容等方面,有需要的小伙伴参考下吧. 今天来学习alsotang的爬虫教程,跟着把CNode简单地爬一遍. 建立项目craelr-demo我们首先建立一个Express项目,然后将app.js的文件内容全部删除,因为我们暂时不需要在Web端展示内容.当然我们也可以在空文件夹下直接 npm install express

爬虫工具汇总

HeritrixHeritrix是一个开源,可扩展的web爬虫项目.Heritrix设计成严格按照robots.txt文件的排除指示和META robots标签.http://crawler.archive.org/ WebSPHINXWebSPHINX是一个Java类包和Web爬虫的交互式开发环境.Web爬虫(也叫作机器人或蜘蛛)是可以自动浏览与处理Web页面的程序.WebSPHINX由两部分组成:爬虫工作平台和WebSPHINX类包.http://www.cs.cmu.edu/~rcm/we

爬虫工具开发进度

最初是想端午节放假3天写一个爬虫,原型版本完成后..发现自己想要的其实是数据采集工具. 目前进度如下 已完成: 1.简易WPF界面,Log显示,开关暂停 2.硬盘结果写入,xml配置文件读写. 3.html分析,用的indexof分析全文.但稳定抓了一星期百度贴吧,中途没崩过. 未完成: 1.xml文件图形化编辑,保存,预览. 2.网页搜索结果,可图形化预览. 最近抓取准备换成HtmlAgility或者Jumony.走这一步问题很多,于是排在后面. 爬虫工具开发进度,布布扣,bubuko.com

【转载】不会编程也能写爬虫?可视化爬虫工具是什么东东

原文:不会编程也能写爬虫?可视化爬虫工具是什么东东 随着Scrapy等框架的流行,用Python等语言写爬虫已然成为一种时尚.但是今天,我们并不谈如何写爬虫,而是说说不要写代码就能写出来的爬虫. 爬虫新时代 在早期互联网世界,写爬虫是一项技术含量非常高的活,往大的方向说,爬虫技术是搜索引擎的重要组成部分. 随着互联网技术的发展,写爬虫不再是门槛非常高的技术了,一些编程语言甚至直接提供爬虫框架,例如python的Scrapy框架,它们让写爬虫走入“寻常百姓家”. 在知乎的热门话题“能利用爬虫技术做

用Nodejs做爬虫

欢迎访文我的博客YangChen's Blog 引言 提起爬虫,最容易想到的就是python,因为python给人的感觉就是啥都能干,但是之前用python做爬虫的过程还是很不爽的,主要问题来自这么几个方面:第一个是对爬来的网页dom操作上,第二个就是编码的处理,第三就是多线程,所以用python做爬虫其实并不是很爽,有没有更爽的方式呢?当然有那就是node.js! Nodejs做爬虫的优劣 首先说一下node做爬虫的优势 第一个就是他的驱动语言是JavaScript.JavaScript在no

一个python爬虫工具类

写了一个爬虫工具类. # -*- coding: utf-8 -*- # @Time : 2018/8/7 16:29 # @Author : cxa # @File : utils.py # @Software: PyCharm from retrying import retry from decorators.decorators import decorator from glom import glom from config import headers import datetim

2019最新Python学习教程(Python学习路线_Python爬虫教程)爬虫工程师必备的10个爬虫工具

2019最新Python学习教程(Python学习路线_Python爬虫教程)爬虫工程师必备的10个爬虫工具 爬虫工程师必备的10个爬虫工具! 最近很多学爬虫的伙伴让推荐顺手的爬虫工具,总结了一下,把这些好用的爬虫工具都跟你们找齐活了! 磨刀不误砍柴工!都知道工欲善其事必先利其器,那么作为经常要和各大网站做拉锯战的爬虫工程师们,更需要利用利用好身边的一切法器,才能更快的攻破对方防线.这里以日常爬虫流程,给大家介绍十款爬虫工具,相信大家掌握以后,工作效率提高是完全没有问题了! 大家也可以看看有你们