欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Node爬虫(二):使用cheerio爬取表情包

发布时间:2024/3/13 编程问答 67 豆豆
生活随笔 收集整理的这篇文章主要介绍了 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爬取表情包的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。