久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

詳解如何使用Node.js開發(fā)一個簡單圖片爬取功能

如何使用Node進(jìn)行爬取?下面本篇文章帶大家聊聊使用Node.js開發(fā)一個簡單圖片爬取功能,希望對大家有所幫助!

詳解如何使用Node.js開發(fā)一個簡單圖片爬取功能

爬蟲的主要目的是收集互聯(lián)網(wǎng)上公開的一些特定數(shù)據(jù)。利用這些數(shù)據(jù)我們可以能進(jìn)行分析一些趨勢對比,或者訓(xùn)練模型做深度學(xué)習(xí)等等。本期我們就將介紹一個專門用于網(wǎng)絡(luò)抓取的 node.js 包—— node-crawler ,并且我們將用它完成一個簡單的爬蟲案例來爬取網(wǎng)頁上圖片并下載到本地。

正文

node-crawler 是一個輕量級的 node.js 爬蟲工具,兼顧了高效與便利性,支持分布式爬蟲系統(tǒng),支持硬編碼,支持http前級代理。而且,它完全是由 nodejs 寫成,天生支持非阻塞異步IO,為爬蟲的流水線作業(yè)機(jī)制提供了極大便利。同時支持對 DOM 的快速選擇(可以使用 jQuery 語法),對于抓取網(wǎng)頁的特定部分的任務(wù)可以說是殺手級功能,無需再手寫正則表達(dá)式,提高爬蟲開發(fā)效率。

安裝引入

我們先新建一個項(xiàng)目,在里面創(chuàng)建index.js作為入口文件。

然后進(jìn)行爬蟲庫 node-crawler 的安裝。

# PNPM pnpm add crawler # NPM npm i -S crawler # Yarn  yarn add crawler

然后用過 require 引入進(jìn)去。

// index.js const Crawler = require("crawler");

創(chuàng)建實(shí)例

// index.js let crawler = new Crawler({     timeout:10000,     jQuery:true, }) function getImages(uri) {     crawler.queue({         uri,         callback: (err, res, done) => {             if (err) throw err;         }     }) }

從現(xiàn)在我們將開始寫一個拿到html頁面的圖片的方法,crawler 實(shí)例化后,在其隊(duì)列中主要是為了寫入鏈接和回調(diào)方法。在每個請求處理完畢后將調(diào)這個回調(diào)函數(shù)。

這里還要說明一下, Crawler 使用了 request 庫,所以 Crawler 可供配置的參數(shù)列表是 request 庫的參數(shù)的超集,即 request 庫中所有的配置在 Crawler 中均適用。

元素捕獲

剛才或許你也看到了 jQuery 這個參數(shù),你猜的沒錯,它可以使用 jQuery 的語法去捕獲 DOM 元素的。

// index.js let data = [] function getImages(uri) {     crawler.queue({         uri,         callback: (err, res, done) => {             if (err) throw err;             let $ = res.$;             try {                 let $imgs = $("img");                 Object.keys($imgs).forEach(index => {                     let img = $imgs[index];                     const { type, name, attribs = {} } = img;                     let src = attribs.src || "";                     if (type === "tag" && src && !data.includes(src)) {                         let fileSrc = src.startsWith('http') ? src : `https:${src}`                         let fileName = src.split("/")[src.split("/").length-1]                         downloadFile(fileSrc, fileName) // 下載圖片的方法                         data.push(src)                     }                 });             } catch (e) {                 console.error(e);                 done()             }             done();         }     }) }

可以看到剛才通過 $ 來完成對請求中 img 標(biāo)簽的捕獲。然后我們下面的邏輯去處理補(bǔ)全圖片的鏈接和剝離出名字為了后面可以保存取名用。這里還定義了一個數(shù)組,它的目的是保存已經(jīng)捕獲到的圖片地址,如果下次捕獲發(fā)現(xiàn)同一個圖片地址,那么就不再重復(fù)處理下載了。

以下是掘金首頁html用 $("img") 捕獲到的信息打印:

詳解如何使用Node.js開發(fā)一個簡單圖片爬取功能

下載圖片

下載之前我們還要安裝一個 nodejs 包—— axios ,是的你沒看錯,axios 不僅提供給前端,它也可以給后端去使用。但是因?yàn)橄螺d圖片要把它處理成數(shù)據(jù)流,所以把 responseType 設(shè)置成 stream 。然后才可以用 pipe 方法保存數(shù)據(jù)流文件。

const { default: axios } = require("axios"); const fs = require('fs');  async function downloadFile(uri, name) {     let dir = "./imgs"     if (!fs.existsSync(dir)) {         await fs.mkdirSync(dir)     }     let filePath = `${dir}/${name}`     let res = await axios({         url: uri,         responseType: 'stream'     })     let ws = fs.createWriteStream(filePath)     res.data.pipe(ws)     res.data.on("close",()=>{         ws.close();     }) }

因?yàn)榭赡軋D片很多,所以要統(tǒng)一放在一個文件夾下,就要判斷有沒有這個文件夾如果沒有就創(chuàng)建一個。然后通過 createWriteStream 方法來把獲取到的數(shù)據(jù)流以文件的形式保存到文件夾里面。

然后我們可以嘗試一下,比如我們捕獲用一下掘金首頁html下的圖片:

// index.js getImages("https://juejin.cn/")

執(zhí)行后發(fā)現(xiàn)就可以發(fā)現(xiàn)已經(jīng)捕獲到靜態(tài)html里面的所有圖片了。

node index.js

詳解如何使用Node.js開發(fā)一個簡單圖片爬取功能

結(jié)語

到了最后,你也可以看到,此代碼可能不適用于SPA(單頁面應(yīng)用)。由于單頁應(yīng)用程序中只有一個 HTML 文件,并且網(wǎng)頁上的所有內(nèi)容都是動態(tài)呈現(xiàn)的,但是萬變不離其宗,不管怎樣,你可以直接處理其數(shù)據(jù)請求,來收集到想要的信息也未嘗不可。

還有一點(diǎn)要說的是,很多小伙伴處理下載圖片的請求用到了 request.js ,當(dāng)然這樣可以的,甚至代碼量更少,但是,我想說的是這個庫在2020年的時候就已經(jīng)被棄用了,最好換一個一直在更新維護(hù)的庫比較好。

詳解如何使用Node.js開發(fā)一個簡單圖片爬取功能

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
久久国产免费看| 在线成人动漫av| 91福利精品在线观看| 国产香蕉精品| 97精品国产一区二区三区| 91精品国产成人观看| 老鸭窝毛片一区二区三区| 日韩激情一二三区| 精品国内亚洲2022精品成人| 在线手机中文字幕| 亚洲一区二区三区免费在线观看 | 久久永久免费| 日韩av免费| 蜜桃久久久久久| 久久亚洲人体| 午夜国产精品视频| 国产精品一区免费在线| 亚洲综合电影| 亚洲制服一区| 国产一区国产二区国产三区 | 激情综合网五月| 深夜福利一区| 成人在线视频免费看| 九九久久婷婷| 国产精品观看| 午夜久久久久| 国产精品2023| 欧美特黄一区| 久久精品九色| 午夜宅男久久久| 精品黄色一级片| 视频一区二区不卡| 日产精品一区二区| 日韩精品三区四区| 美女网站一区| 麻豆视频观看网址久久| 亚洲主播在线| 人人草在线视频| 日韩一区二区三区高清在线观看| 久久久久久久欧美精品| 国产一区福利| 日本一区免费网站| 日韩精品一区二区三区免费观看| 日韩av不卡在线观看| 伊人久久大香线蕉av不卡| 国产精品天天看天天狠| 午夜在线精品| 久久精品官网| 国产精品玖玖玖在线资源| 红桃视频国产一区| 国产成人精品999在线观看| 日韩精品一区二区三区免费视频| 99久精品视频在线观看视频| 国产黄色一区| 四虎精品一区二区免费| 激情视频一区二区三区| 精品欧美日韩精品| 日韩不卡一二三区| 不卡一区2区| 成人av三级| 国产亚洲精品美女久久久久久久久久| 99热精品在线| 日韩精品影视| 国产一区二区三区亚洲综合| 亚洲69av| 日韩精品一级中文字幕精品视频免费观看 | 色婷婷综合网| 国产毛片精品| 日韩三级一区| 中文字幕中文字幕精品| 亚洲精品中文字幕乱码| 88xx成人免费观看视频库| 久久不卡国产精品一区二区| 日本不卡视频在线观看| 婷婷综合一区| 香蕉久久夜色精品国产| 亚洲性色视频| 播放一区二区| 日韩国产一区二区| 国产一区二区三区不卡av| 国产精品一区二区三区四区在线观看| 香蕉久久国产| 先锋亚洲精品| 奶水喷射视频一区| 99综合视频| 国产精品7m凸凹视频分类| 欧美gv在线| 亚洲播播91| 久久久天天操| 久久男人天堂| 国产伦久视频在线观看| 精品国产亚洲一区二区三区大结局 | 日本中文字幕一区二区| 亚洲综合国产| 在线视频观看日韩| 99tv成人| 午夜久久久久| 视频在线观看一区| 伊人精品久久| 亚洲精品少妇| 日韩av字幕| 国产精品多人| 国产精品porn| 精品视频网站| 久久青青视频| 欧美日中文字幕| 欧美精品一二| 亚洲欧美日韩国产一区二区| 免费观看在线综合| 亚洲伊人影院| 日本在线一区二区三区| 久久精品99久久久| 国产欧美午夜| 久久不卡日韩美女| 色一区二区三区| 国产一区二区三区自拍| 亚洲欧洲一区| 亚洲bt欧美bt精品777| 欧美亚洲网站| 久久av影院| 亚洲黄色免费av| 99久久夜色精品国产亚洲狼| 99在线观看免费视频精品观看| 亚洲精品字幕| 国产欧美综合一区二区三区| 久久97视频| 精品中文一区| 日韩综合小视频| 国产精品777777在线播放| 欧美亚洲日本精品| 99在线|亚洲一区二区| 亚洲精品大片| 麻豆91精品91久久久的内涵| 日韩免费在线| 亚洲专区在线| 国产精品最新| 日韩高清不卡| 在线免费观看亚洲| 国产精品va视频| 亚洲最新无码中文字幕久久| 9色精品在线| 国产精品一区二区av交换| 麻豆网站免费在线观看| 久久影院一区| 中文字幕亚洲在线观看| 国产黄色一区| 欧美日韩精品免费观看视频完整| 日本不卡视频一二三区| 日本午夜大片a在线观看| 亚洲在线电影| 精品亚洲a∨一区二区三区18| 不卡一区2区| 国产欧美日韩精品一区二区三区 | 免费的成人av| 精品国产欧美日韩| 午夜久久美女| 国产日韩一区二区三区在线| 国产综合色区在线观看| 亚洲午夜久久| 国产一区二区色噜噜| 石原莉奈在线亚洲二区| 久久精品系列| 视频在线观看91| 97在线精品| 亚洲啊v在线免费视频| 香蕉成人av| 国产剧情一区二区在线观看| 精品欧美久久| 久久精品福利| 亚洲精品成a人ⅴ香蕉片| 欧美日韩国产观看视频| 亚洲精品成人一区| 99精品美女| 欧美1区二区| 男女性色大片免费观看一区二区| 福利视频一区| 日韩av黄色在线| 亚洲欧洲一区二区天堂久久| 免费一级欧美在线观看视频| 久久99伊人| 久久久一本精品| 国产精品巨作av| 免费日韩视频| 亚洲不卡系列| 国产精品www.| 中文字幕一区二区三区四区久久 | 欧美日韩视频| 97精品国产| 国产欧美精品| 日韩中文字幕av电影| 特黄特色欧美大片| 欧美国产先锋| 四虎成人精品一区二区免费网站| 久久九九电影| 精品国产麻豆| 国产一卡不卡| 一区二区精彩视频| 亚洲激情精品| 久久国产小视频| 国产拍在线视频|