実用的な共有: Nodejs を使用して 10,000 を超える画像をクロールしてダウンロードする
この記事では、著者が nodejs を使用して 10,000 枚以上の妹の壁紙をクロールした方法を確認するための node の実践的な経験を共有します。
皆さん、こんにちは。私は Xiaoma です。なぜそんなにたくさんの写真をダウンロードする必要があるのですか? 数日前、uni-app uniCloud を使用して壁紙アプレットを無料でデプロイしましたが、アプレットにコンテンツを埋め込むためのリソースが必要になりました。
画像をクロールする
最初にプロジェクトを初期化し、axios
と cheerio
npm init -y && npm i axios cheerio
axios
をインストールします。 Web コンテンツをクロールする場合、cheerio
はサーバー側の jquery API であり、これを使用して dom 内の画像アドレスを取得します;
const axios = require('axios') const cheerio = require('cheerio') function getImageUrl(target_url, containerEelment) { let result_list = [] const res = await axios.get(target_url) const html = res.data const $ = cheerio.load(html) const result_list = [] $(containerEelment).each((element) => { result_list.push($(element).find('img').attr('src')) }) return result_list }
このようにして、画像の URL を取得できますページ内で。次に、URLに従って画像をダウンロードする必要があります。
nodejs を使用してファイルをダウンロードする方法
方法 1: 組み込みモジュール「https」と「fs」を使用する
使用nodejs ファイルのダウンロードは、組み込みパッケージまたはサードパーティのライブラリを使用して実行できます。
GET メソッドは、ダウンロードするファイルを取得するために HTTPS で使用されます。 createWriteStream()
は、書き込み可能なストリームを作成するために使用されるメソッドで、ファイルの保存場所であるパラメーターを 1 つだけ受け取ります。 Pipe()
は、読み取り可能なストリームからデータを読み取り、書き込み可能なストリームにデータを書き込むメソッドです。
const fs = require('fs') const https = require('https') // URL of the image const url = 'GFG.jpeg' https.get(url, (res) => { // Image will be stored at this path const path = `${__dirname}/files/img.jpeg` const filePath = fs.createWriteStream(path) res.pipe(filePath) filePath.on('finish', () => { filePath.close() console.log('Download Completed') }) })
方法 2: DownloadHelper
npm install node-downloader-helper
次は、Web サイトから画像をダウンロードするコードです。オブジェクト dl はクラス DownloadHelper によって作成され、次の 2 つのパラメータを受け取ります:
- ダウンロードされるイメージ。
- ダウンロード後に画像を保存する必要があるパス。
File 変数にはダウンロードされる画像の URL が含まれ、filePath 変数には保存されるファイルへのパスが含まれます。
const { DownloaderHelper } = require('node-downloader-helper') // URL of the image const file = 'GFG.jpeg' // Path at which image will be downloaded const filePath = `${__dirname}/files` const dl = new DownloaderHelper(file, filePath) dl.on('end', () => console.log('Download Completed')) dl.start()
方法 3: ダウンロードを使用する
は npm マスター sindresorhus によって作成されており、非常に使いやすいです
npm install download
以下は、Web サイトから画像をダウンロードするコードです。ダウンロード関数は、ファイルとファイル パスを受け取ります。
const download = require('download') // Url of the image const file = 'GFG.jpeg' // Path at which image will get downloaded const filePath = `${__dirname}/files` download(file, filePath).then(() => { console.log('Download Completed') })
最終コード
当初は Baidu の壁紙をクロールしたかったのですが、解像度が十分ではなく、透かしなどが入っていました。その後、グループの友人が API を見つけました。某モバイルアプリの高画質壁紙は、ダウンロードURLを直接取得できるので、直接利用させていただきました。
次は完全なコードです
const download = require('download') const axios = require('axios') let headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36', } function sleep(time) { return new Promise((reslove) => setTimeout(reslove, time)) } async function load(skip = 0) { const data = await axios .get( 'http://service.picasso.adesk.com/v1/vertical/category/4e4d610cdf714d2966000000/vertical', { headers, params: { limit: 30, // 每页固定返回30条 skip: skip, first: 0, order: 'hot', }, } ) .then((res) => { return res.data.res.vertical }) .catch((err) => { console.log(err) }) await downloadFile(data) await sleep(3000) if (skip < 1000) { load(skip + 30) } else { console.log('下载完成') } } async function downloadFile(data) { for (let index = 0; index < data.length; index++) { const item = data[index] // Path at which image will get downloaded const filePath = `${__dirname}/美女` await download(item.wp, filePath, { filename: item.id + '.jpeg', headers, }).then(() => { console.log(`Download ${item.id} Completed`) return }) } } load()
上記のコードでは、最初に User-Agent
を設定し、3 秒の遅延を設定する必要があります。これにより、サーバーがブロックされるのを防ぐことができますクローラーに直接アクセスして 403 を返します。
直接 nodeindex.js
を実行すると、イメージが自動的にダウンロードされます。
、
体験
WeChat アプレット検索「水瓜图」体験。
https://p6-juejin.byreimg.com/tos-cn-i-k3u1fbpfcp/c5301b8b97094e92bfae240d7eb1ec5e~tplv-k3u1fbpfcp-zoom-1.awebp?
その他のノード関連知識については、nodejs チュートリアル をご覧ください。
以上が実用的な共有: Nodejs を使用して 10,000 を超える画像をクロールしてダウンロードするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Node.jsにはLTSバージョンとCurrentバージョンがありますが、この2つのバージョンの違いは何ですか?次の記事は、Node.js のバージョン間の違いを簡単に理解し、適切なバージョンを選択する方法について説明するのに役立ちます。

Node.js はシングルスレッド言語です。V8 エンジンに基づいて開発されています。V8 はもともとブラウザ側で JavaScript 言語を解析して実行するように設計されました。最大の特徴はシングルスレッドであることです。この設計により、いくつかのエラーが回避されます。マルチスレッドの状態同期の問題により、軽量化され、使いやすくなります。

Node.js はどのようにバージョン管理を実行しますか?次の記事では、非常に実用的な Node.js のバージョン管理ツールを 3 つ紹介します。

npm は JavaScript 界のパッケージ管理ツールであり、Node.js プラットフォームのデフォルトのパッケージ管理ツールです。 npm を通じて、コードのインストール、共有、配布、プロジェクトの依存関係の管理を行うことができます。この記事では npm の原則について説明します。お役に立てれば幸いです。

IDEA でノードを実行するにはどうすればよいですか?次の記事では、IDEA で Node.js を構成、インストール、実行する方法を紹介します。

Node.js は非同期リソース コンテキスト共有をどのように実装しますか?次の記事では、Node が非同期リソース コンテキスト共有を実装する方法を紹介します。非同期リソース コンテキスト共有の使用法について話しましょう。皆さんのお役に立てれば幸いです。

この記事では、マルチバージョンノードのインストール方法とノードバージョンの切り替え方法を詳しく紹介しますので、皆様のお役に立てれば幸いです。

QR コードは生活のどこにでもあります。私も以前、Java の zxing ライブラリを使用して QR コードを生成したことがありますが、これは非常に強力です。しかし実際には、nodejs には QR コードを生成できるサードパーティ ライブラリが多数あります。今回は qrcode ライブラリを使用して QR コードを生成します。
