Today to learn alsotang's crawler tutorial, follow the CNode simple climb.

建设项目craelr演示

我们首先建立一个快递项目,然后删除所有的app.js文件的内容,因为我们不需要显示的内容在网站的时间。当然,我们也可以使用NPM安装直接表达的空文件夹下使用功能表示我们需要。

目标网站分析

例如,这是在首页div标签CNODE方法的一部分,我们使用的是这系列的id和class来找到我们需要的信息。



用示源数据的获取



SuperAgent通过AJAX API使用HTTP库。它的用法类似于jQuery。我们通过它启动请求并在回调函数中输出结果。

复制代码代码如下所示:

VaR表示=需要('express);

var url =需要('url '); / / URL解析

VaR SuperAgent =需要('superagent '); / /三外部依赖别忘了NPM安装

VaR再见=需要('cheerio);

无功eventproxy =需要('eventproxy);

无功targeturl = 'https: / / / cnodejs。org;

superagent.get(targeturl)

结束(函数(错误,RES){

console.log(RES);

});



它的结果是一个包含目标URL信息的对象,并且站点的内容主要是在文本(字符串)中。



用再见解析



再见作为服务器端的jQuery函数,我们首先使用它。负荷()加载HTML,然后过滤元件通过CSS选择器。

复制代码代码如下所示:

var $ = cheerio.load(res.text);

通过CSS选择器来过滤数据

$(# topic_list。topic_title)。每个(功能(IDX,元){

console.log(元);

});



结果是调用一个对象,每个函数(索引,元素)函数遍历每个对象并返回HTML DOM元素。



输出console.log($ element.attr(标题));结果是广州,06 2014年12月UC领域,NodeParty

这样一个标题,输出console.log($ element.attr('href '));结果是URL,如 /主题/ 545c395becbcb78265856eb2.then nodejs1 url.resolve()函数来完成完整的URL。

复制代码代码如下所示:

superagent.get(特尔)

结束(函数(错误,RES){

如果(错误){

返回console.error(ERR);

}

无功topicurls = { };

var $ = cheerio.load(res.text);

获取所有链接

$(# topic_list。topic_title)。每个(功能(IDX,元){

元素$ = $(元素);

VaR href = url.resolve(特尔,element.attr美元('href '));

console.log(链接);

/ / topicurls.push(链接);

});

});



使用eventproxy同时抓住每个话题的内容

本教程介绍一种深层嵌套的一个例子(串行)法和计数法,这eventproxy使用事件(平行)的方法来解决这个问题。当所有的人完成,eventproxy接收事件信息,自动帮你呼叫处理功能。

复制代码代码如下所示:

第一步: / /例子得到一个eventproxy

VaR EP =新eventproxy();

第二步:回调函数定义监视器事件。

重复监测后的方法

/ /参数:事件名称(字符串)事件的名称、时间(数量)的听众的时候,回调回调函数

Ep.after('topic_html ',topicurls.length,功能(主题){)

/ /主题是一个数组,包含40 ep.emit('topic_html ',对)在40对

映射

主题= topics.map(功能(topicpair){

/ /使用再见

无功topicurl = topicpair { 0 };

无功topichtml = topicpair { 1 };

var $ = cheerio.load(topichtml);

返回({

标题:$('。topic_full_title)。文本()饰(),

链接:topicurl,

comment1:$('。reply_content)。情商(0)。文本()饰()。

});

});

结果

console.log('outcome:');

console.log(主题);

});

第三步:确定发布/事件消息

topicurls.foreach(功能(topicurl){)

superagent.get(topicurl)

结束(函数(错误,RES){

console.log(感人+ topicurl +成功);

Ep.emit('topic_html,{ topicurl,res.text });

});

});



给出如下结果



拓展练习(挑战)

获取消息的用户名和完整性。



发现在文章页的源代码注释的用户类的名称和类名是reply_author。控制台。日志的第一要素,$('。reply_author),(0)可以看到,我们需要把所有的东西都在这里头。



首先,我们首先抓住一篇文章,并获得所有的需要在同一时间内。

复制代码代码如下所示:

无功userhref = url.resolve(特尔,$('。reply_author '),得到(0)。href属性。);

console.log(userhref);

console.log($('。reply_author '),得到(0)。孩子{ 0 }。数据);



我们可以抓住整体信息通过https: / / cnodejs。org /用户/用户名

复制代码代码如下所示:

$('。reply_author)。每个(功能(IDX,元){)

元素$ = $(元素);

console.log($ element.attr('href '));

});



在用户信息页$(大)中。

利用函数得到的第一要素,得到(0)的再见。

复制代码代码如下所示:

无功userhref = url.resolve(特尔,$('。reply_author '),得到(0)。href属性。);

console.log(userhref);



这只是对一篇文章的抓取,对于需要修改的40篇文章。