人工智能现场

node.js写马蜂窝爬虫 有关ajax

前言

之前写的爬虫都是直接获取网页内容,解析保存需求数据。然而我后来又遇到一些网页数据使用Ajax获取的,数据不存在于网页的源代码。(高手大神请无视我的见识浅薄) 后来经过学习,终于搞明白这类的网页怎么抓去信息。废话不多说,我们就以马蜂窝为例,做一个简单爬虫。

目标

马蜂窝爬取北京的热门景点。

具体流程

编写代码前,先来到这个网页 http://www.mafengwo.cn/jd/10065/gonglve.html 最下面北京全部景点模块。

打开chrome inspect under network 是这样的

看到这里就可以开始写代码了

核心代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
attractionsList = function(i,cityname){
superagent
.post('http://www.mafengwo.cn/ajax/router.php')
.type('form')
.send({
'sAct':'KMdd_StructWebAjax|GetPoisByTag',
'iMddid':10065,
'iTagId':0,
'iPage':i,
})
.set('User-Agent', 'Mozilla/5.0')
.end(function(err, res){
var jsonstring = JSON.parse(res.text);
var $ = cheerio.load(jsonstring.data.list)
$('li').each(function(){
var data = $(this);
var href = data.find('a').attr('href');
var title = data.find('a').attr('title');
superagent.get('http://www.mafengwo.cn'+href)
.end(function(err,docs){
if(!err){
var $ = cheerio.load(docs.text)
var summary = $('div.summary').text()
console.log(title);
console.log(summary);
}
})
})
var $$ = cheerio.load(jsonstring.data.page);
if ($$('a.pi.pg-next').length) {
getList(i+1,cityname)
};
});
}

这段代码是获取景点列表后,去景点的详细界面获取景点简介。需要注意的是,爬马蜂窝并发的线程不能太多,否则会被封ip,哈哈。

交友

对互联网技术 机器学习 电影 热门游戏 及其它感兴趣的小伙伴可以加我微信好友。大家一起进步,哈哈。

坚持原创技术分享,您的支持将鼓励我继续创作!