30行代码教你爬取“扒皮吧”帖子及链接地址!

本文预计阅读4分钟。

今天刷贴吧的时候突发奇想,爬一波贴吧的帖子,说爬就爬。贴吧选择了比较有趣的「扒皮吧」。目标爬取贴吧首页标题及链接地址并保存到本地文件。

接下来就是代码实施,用 Node.JS 来爬取。

首先第一步,引包。

// 选用方便的 request 包来发送访问请求。

constrequest =require('request');

// 用 cheerio 来解析爬到的页面

constcheerio =require('cheerio');

// fs 读写文件

constfs =require('fs');

然后就要开始发送请求了

// 地址去贴吧直接复制粘贴,使用 get 方式请求

request.get('https://tieba.baidu.com/f?ie=utf-8&kw=%E6%89%92%E7%9A%AE&fr=search',function(err,res,body){

// 错误处理

if(err){

console.log(err);

}

// 使用 cheerio 对爬到的页面进行处理

var$ = cheerio.load(body);

// 声明一个 数组储存话题信息

vartopic = [];

// 通过 Chrome 浏览器F12检查,找到标题信息存放的标签

// 类名为 j_th_tit 通过 each 方法遍历

$(".j_th_tit ").each(function(index, el){

var$el = $(el);

// 获取标题和链接

vartitle = $el.attr('title');

varhref = $el.attr('href');

// 以对象方式存入 topic 数组

topic.push({

title: title,

href: href,

})

})

这个时候如果直接输出 topic 的话就会发现这种情况:

这个时候就需要将 topic 转成 JSON 数据:

topic= JSON.stringify(topic);

调用 fs 模块将数据写入 topic.json 文件:

fs.writeFile('topic.json', topic);

这个时候会有一条提示信息,意思是 fs.writeFile() 是异步方法但没有写回调函数,这里输出文件后没有再执行的代码,可以不用理会。

查看 JSON 文件:

发现每隔一个有一个空集合,然后遍历 topic 数组去掉空集合:

// 声明一个临时变量 temp 储存数据

vartemp = [];

for(leti =1; i

temp.push(topic[i]);

};

最终的代码:

constrequest =require('request');

constcheerio =require('cheerio');

constfs =require('fs');

request.get('https://tieba.baidu.com/f?ie=utf-8&kw=%E6%89%92%E7%9A%AE&fr=search',function(err,res,body){

if(err){

console.log(err);

}

var$ = cheerio.load(body);

vartopic = [];

$(".j_th_tit ").each(function(index, el){

var$el = $(el);

vartitle = $el.attr('title');

varhref = $el.attr('href');

topic.push({

title: title,

href: href,

})

})

vartemp = [];

for(leti =1; i

temp.push(topic[i]);

};

temp =JSON.stringify(temp);

fs.writeFile('topic.json', temp);

});

文件内容

PS:最新干货分享请回复学习资源领取

最后不要忘记转发和点赞哦~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180512G0GVEL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券