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保存高维数
- 下一篇: 微信小程序万里目_微信小程序加盟千万别忘