九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Node.js基礎入門第六天
userphoto

2023.10.10 廣東

關注

經(jīng)過前面五天的學習,對Node.js開發(fā)已經(jīng)逐漸入門,今天結合之前學到的東西,開發(fā)一個小示例【爬取某圖片網(wǎng)站的圖片】,僅供學習分享使用,如有不足之處,還請指正。

涉及知識點


開發(fā)一個小爬蟲,涉及的知識點如下所示:

  • https模塊,主要是用戶獲取網(wǎng)絡資源,如:網(wǎng)頁源碼,圖片資源等。

  • cheerio模塊,主要用于解析html源碼,并可訪問,查找html節(jié)點內(nèi)容。

  • fs模塊,主要用于文件的讀寫操作,如保存圖片,日志等。

  • 閉包,主要是對于異步操作,對象的隔離保護。

cheerio簡介



什么是cheerio ?

cheerio是為服務器特別定制的,快速、靈活、實施的jQuery核心實現(xiàn)。主要用于在服務端解析html。特點如下所示:

  • 易用,語法類似jQuery語法,從jQuery庫中去除了所有 DOM不一致性和瀏覽器尷尬的部分。

  • 解析快,比JSDOM快八倍。

  • 靈活,Cheerio 封裝了兼容的htmlparser。Cheerio 幾乎能夠解析任何的 HTML 和 XML document。


安裝cheerio

首先在命令行,切換到程序目錄,然后輸入安裝命令進行安裝,如下所示:

cnpm install cheerio
安裝過程,如下所示:

準備工作

在編寫爬蟲之前,首先需要分析目標內(nèi)容,本次需要爬取的是某網(wǎng)站,星空類型的圖片內(nèi)容,經(jīng)過分析,發(fā)現(xiàn)所有的圖片都是在ul下每一個li中的a標簽內(nèi)的img中,本次只需要解析出img的src屬性,即可獲取圖片的下載路徑。如下所示:

核心代碼

經(jīng)過以上分析,通過Node.js編寫代碼,分為兩步,獲取所有圖片的url路徑,即解析所有目標img元素的src屬性。然后再下載具體圖片進行保存即可。

引用所需要的功能模塊,如下所示:

var https = require('https');var cheerio = require('cheerio');var fs = require('fs');

獲取并解析html頁面內(nèi)容,如下所示: 

//爬取的網(wǎng)址 var addrs=['https://www.*****.com/topic/show_27202_1.html','https://www.*****.com/topic/show_27202_2.html','https://www.*****.com/topic/show_27202_3.html'];
for(i in addrs){ (function(num){ var logger = fs.createWriteStream('./download/log.txt',{flags:'a+',autoClose:'true'}); var addr = addrs[num]; //創(chuàng)建目錄 var p1 = new Promise(function(resolve,reject){ fs.access('./download',function(err){ if(err){ fs.mkdir('./download',function(e){ if(e){ console.log('創(chuàng)建失敗'); } }); }else{ resolve("success"); } }); }); p1.then(function(datas){ var html=''; var p2 = new Promise(function(resolve,reject){ https.get(addr,function(res){ res.on('data',function(data){ html+=data.toString(); }) res.on('end',function(){ resolve("success"); }); }); }); p2.then(function(data){ //下載完成后,進行解析 const $ =cheerio.load(html); var lis = $('#img-list-outer').find('li'); for(var j=0;j<lis.length-1;j++){ var li = lis[j]; var src =$(li).find('a').find('img').attr('src'); //console.log(src); //console.log('-------------------------'); var imgurl='https:'+src; download(imgurl); var msg='['+j+']下載成功:'+imgurl; logger.write(msg+'\n'); console.log(msg); } logger.end(); }); }); })(i);}

注意:因為所有爬取的目標共分為3頁,所以用到了循環(huán),并且在循環(huán)中用到了閉包。

下載并保存單張圖片代碼,如下所示:

//下載圖片function download(imgurl){  var p1 = new Promise(function(resolve,reject){    https.get(imgurl,function(res){      var imgName=imgurl.substr(imgurl.lastIndexOf('/')+1);      var stream = fs.createWriteStream('./download/'+imgName);      res.pipe(stream);      setTimeout(function(){        resolve('success');      },300);          });  });  p1.then(function(data){    return;  });}


示例截圖


開發(fā)完成后,運行代碼,如下所示:


 爬取的圖片,保存在文件夾中,如下所示:

注意:添加日志,是為了方便記錄程序執(zhí)行過程,對比圖片和日志,便于發(fā)現(xiàn)問題。

備注


學而時習之,不亦說乎?有朋自遠方來,不亦樂乎?人不知而不慍,不亦君子乎?

學習編程,從關注【老碼識途】開始?。?!

本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
javascript – Chrome說“資源解釋為樣式表,但使用MIME類型text / html傳輸”
JS一般般的網(wǎng)頁重構可以使用Node.js做些什么
JS大幅卷屏廣告代碼
滾動新聞·滾動圖片·圖片幻燈片變幻
!!!!!JQUERY 圖片自適應寬高
webView中圖片緩存
更多類似文章 >>
生活服務
熱點新聞
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服