百度的介紹:cheerio是nodejs的抓取頁面模塊,為服務(wù)器特別定制的,快速、靈活、實施的jQuery核心實現(xiàn)。適合各種Web爬蟲程序。
今天就實驗下,爬取圖蟲網(wǎng)的圖片,不得不說。圖蟲網(wǎng)真的聚集好多優(yōu)秀的攝影師,照片都感覺好好啊(沒打廣告),但是大部分的圖片只能預(yù)覽,無法下載。所以:
確定你要爬取的主題照片,現(xiàn)在以微風(fēng)不燥 秋意正好這套照片為例子(教程十分具體化);
1.新建demo文件夾,創(chuàng)建tuchong.js。
然后用終端進(jìn)入此文件夾。


2.此時在終端分別安裝sync-request、cheerio、fs、request依賴,
命令行分別執(zhí)行npm install?sync-request/cheerio/fs/request
3.打開網(wǎng)站,調(diào)試,你會發(fā)現(xiàn)所有的圖片都放在此dom下

因為我們需要創(chuàng)建文件夾,所以我們拿到這組圖的主題名字

上代碼(代碼的注釋挺詳細(xì)):
const fs = require('fs') //創(chuàng)建文件、文件夾
const cheerio = require('cheerio') //cheerio爬蟲
const requests = require('sync-request') //node的網(wǎng)絡(luò)請求
const request = require('request') //利用request模塊保存圖片
var html = '';
let count = 0 // 記錄扒取的圖片數(shù)量
let imgDirName = '' // 圖片存放的目錄
let url = "https://tuchong.com/443122/15624611/"; // 目標(biāo)網(wǎng)站
// 拿到網(wǎng)站內(nèi)容轉(zhuǎn)化成html字符串
html = requests('GET', url).getBody().toString();
console.log(html)
// 調(diào)用自己的方法
filterSlideList(html)
function filterSlideList(html) {
? ? if (html) {
? ? ? ? var $ = cheerio.load(html); // 利用cheerio模塊將完整的html裝載到變量$中,之后就可以像jQuery一樣操作html了
? ? ? ? // 拿到圖片的父容器
? ? ? ? var $imgdom = $("article.post-content");
? ? ? ? // 拿到主題,并使用主題名字(名字太長,截取一下)創(chuàng)建文件夾
? ? ? ? var imgarrname = $("title").text().substr(0, 5);
? ? ? ? console.log("開始爬 " + imgarrname + " 主題的圖片")
? ? ? ? //創(chuàng)建放圖片的文件夾
? ? ? ? fs.mkdir('./img/' + imgarrname + '/', (err) => {
? ? ? ? ? ? if (err) {
? ? ? ? ? ? ? ? console.log(err)
? ? ? ? ? ? }
? ? ? ? })
? ? ? ? //取每一張圖片,并把圖片放到目錄下
? ? ? ? $imgdom.find('img').each(function(index, el) {
? ? ? ? ? ? var imgurl = $(this).attr("src"), //拿到圖片的在線鏈接
? ? ? ? ? ? ? ? imgnam = $(this).attr("alt"), //拿到圖片的標(biāo)題
? ? ? ? ? ? ? ? imgid = $(this).attr("id"); //圖片名字有可能重復(fù),取到唯一id
? ? ? ? ? ? // 利用request模塊保存圖片
? ? ? ? ? ? request(imgurl).pipe(fs.createWriteStream('./img/' + imgarrname + '/' + imgnam + imgid + '.jpg'))
? ? ? ? ? ? // '''''''''''''''''''''''''''''''''''''''''''''''''圖片目錄'''''''''''''? 拼接的圖片名? ? '''''
? ? ? ? ? ? count++;
? ? ? ? ? ? console.log(imgurl);
? ? ? ? ? ? console.log(imgnam);
? ? ? ? ? ? console.log('已爬取圖片' + count + '張');
? ? ? ? });
? ? }
}
3.執(zhí)行node tuchong.js
