文章采集api 蚂蜂窝爬虫
优采云 发布时间: 2020-08-24 06:13文章采集api 蚂蜂窝爬虫
Nodejs爬取蚂蜂窝文章的爬虫以及搭建第三方服务器
如题,本项目用Nodejs实现了对蚂蜂窝网站的爬取,并将数据存储到MongoDB中,再以Express作服务器端,Angularjs作后端实现对数据的托管。
本项目Github地址:
本项目线上地址:
本文介绍其中部份的技术细节。
获取数据
打开蚂蜂窝网站,发现文章部分的数据是用Ajax获取的,包括分页也是,所以查看一下实际的恳求路径,为
所以程序应当向这个php文件发送恳求,用Nodejs的话直接http请求也是没问题的,为了代码好看,我使用request库封装一下。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function getArticleList(pageNum) {
request({
url: "http://www.mafengwo.cn/ajax/ajax_article.php?start=" + pageNum,
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, data) {
var res = data.match(/i\\\/\d{7}/g);
for (var i = 0; i < 12; i++) {
articlesUrl[i] = res[i * 3].substr(3, 7);
};
async.each(articlesUrl, getArticle, function(err) {
console.log('err: ' + err);
});
});
}
每页是12篇文章,每篇文字都是(伪)静态页面,正则提取出其中的文章页Url。
对每位Url发送恳求,拿到源码。
1
2
3
4
5
6
7
8
9
10
function getArticle(urlNumber) {
request({
url: "http://www.mafengwo.cn/i/" + urlNumber + ".html",
headers: {
'User-Agent': 'Mozilla/5.0'
}
}, function(error, response, data) {
//处理数据
});
};
接下来就是处理数据了。
这一段代码较长,但是目的是十分明晰的,代码也太清晰。我们须要从这个页面中领到文章的标题,以及文章的内容。(文章作者以及发布时间因为时间关系我并没有处理,不过也在代码以及数据库种预留了位置,这个同理很容易完成。)
来,我们剖析一下这段代码。
1
2
3
4
<p>var title, content, creator, created;
/*获取标题*/
title = data.match(/\s*.+\s*/).toString().replace(/\s*/g, "").replace(/$/g, "").replace(/\//g, "|").match(/>.+