NodeJS爬行动物的制作全过程

NodeJS爬行动物的制作全过程
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篇文章。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部