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篇文章。