日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

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

编程问答

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

發布時間:2024/3/13 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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爬取表情包的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。