Node爬虫(二):使用cheerio爬取表情包
生活随笔
收集整理的这篇文章主要介绍了
Node爬虫(二):使用cheerio爬取表情包
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
cheerio
官方在线文档
简介
cheerio是nodejs的抓取页面模块,为服务器特别定制的,快速、灵活、实施的jQuery核心实现。适合各种Web爬虫程序
安装
npm install cheerio使用
1、载入html字符串
const cheerio = require('cheerio'); const $ = cheerio.load('<ul id="fruits">...</ul>');2、选择器
Cheerio的选择器实现与jQuery的选择器实现几乎相同,因此API非常相似
例如:获取id为app下的所有a标签
$(#app a)爬取表情包
表情包网址:斗图了
这里爬取第二页,因为有规律
https://www.doutula.com/article/list/?page=2注: 这里遇到了些问题,主要是分析网页源代码时分析错误了,这里建议将要分析的代码下载到本地,格式化一下再分析
代码
//加载模块 var cheerio = require('cheerio') var axios = require('axios') var fs = require('fs') var path = require('path') var http = require('http')//表情包网址 bqb_url = "https://www.doutula.com/article/list/?page=2"//发起ajax请求 axios.get(bqb_url).then((res) => {//导入要分析的htmlconst $ = cheerio.load(res.data);//获取表情包所在的所有img标签var all_img = $('.container_ .container .row .col-sm-9 a .random_article .col-xs-6 img')//爬取对应的网页源代码,便于接下来的分析/* fs.writeFile('./a.html',all_img,function(err){if(err){console.log("失败")}}) *///根据属性获取所有的图片地址,并将其保存在本地$(all_img).each(function() {//console.log($(this).attr('data-backup')) 打印所有的图片地址var img_url = $(this).attr('data-backup')if (typeof img_url === 'string') {imgObj = path.parse(img_url) //解析图片地址img_name = imgObj.base //图片名称//保存图片到本地var stream = fs.createWriteStream('./file/' + img_name)axios.get(img_url, {responseType: 'stream'}).then(function(res) {res.data.pipe(stream)res.data.on('close', function() {console.log(img_name + "图片保存完成")stream.close() //关闭文件写入流})})}}); })效果图:
遇到的坑
1、有些图片的url地址不存在,先判断是否存在,否则保存时会保存
3、file文件夹必须存在,否则也会保存
4、保存文件
我也是node刚开始学,有些东西也不明白。第一次是想通过fs的readFile读取图片,然后再通过writeFile将文件保存,但是不行无法读取网上的文件,所以还是要通过创建流,再使用管道的方式保存
var stream = fs.createWriteStream('./file/' + img_name)axios.get(img_url, { //必须指定响应类型,不然无法正确下载图片responseType: 'stream' }).then(function(res) {res.data.pipe(stream)}) }5、网络请求
这里使用的axios进行网络请求,好处是前后端都可以使用,比较统一。当然也可以使用node本身的http请求(或https请求),但是网址如果是http请求就需要使用http请求,是https请求就需要使用https请求
总结
以上是生活随笔为你收集整理的Node爬虫(二):使用cheerio爬取表情包的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: Python | Python保存高维数
- 下一篇: 微信小程序万里目_微信小程序加盟千万别忘