目次
画像をクロールする
nodejs を使用してファイルをダウンロードする方法
最終コード
体験
ホームページ ウェブフロントエンド jsチュートリアル 実用的な共有: Nodejs を使用して 10,000 を超える画像をクロールしてダウンロードする

実用的な共有: Nodejs を使用して 10,000 を超える画像をクロールしてダウンロードする

Mar 24, 2022 pm 07:49 PM
nodejs​

この記事では、著者が nodejs を使用して 10,000 枚以上の妹の壁紙をクロールした方法を確認するための node の実践的な経験を共有します。

実用的な共有: Nodejs を使用して 10,000 を超える画像をクロールしてダウンロードする

皆さん、こんにちは。私は Xiaoma です。なぜそんなにたくさんの写真をダウンロードする必要があるのですか? 数日前、uni-app uniCloud を使用して壁紙アプレットを無料でデプロイしましたが、アプレットにコンテンツを埋め込むためのリソースが必要になりました。

画像をクロールする

最初にプロジェクトを初期化し、axioscheerio

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 つのパラメータを受け取ります:

  1. ダウンロードされるイメージ。
  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(&#39;下载完成&#39;)
  }
}

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 + &#39;.jpeg&#39;,
      headers,
    }).then(() => {
      console.log(`Download ${item.id} Completed`)
      return
    })
  }
}

load()
ログイン後にコピー

上記のコードでは、最初に User-Agent を設定し、3 秒の遅延を設定する必要があります。これにより、サーバーがブロックされるのを防ぐことができますクローラーに直接アクセスして 403 を返します。

直接 nodeindex.js を実行すると、イメージが自動的にダウンロードされます。

実用的な共有: Nodejs を使用して 10,000 を超える画像をクロールしてダウンロードする実用的な共有: Nodejs を使用して 10,000 を超える画像をクロールしてダウンロードする

体験

WeChat アプレット検索「水瓜图」体験。

https://p6-juejin.byreimg.com/tos-cn-i-k3u1fbpfcp/c5301b8b97094e92bfae240d7eb1ec5e~tplv-k3u1fbpfcp-zoom-1.awebp?

その他のノード関連知識については、nodejs チュートリアル をご覧ください。

以上が実用的な共有: Nodejs を使用して 10,000 を超える画像をクロールしてダウンロードするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Node.js のバージョン間の違いは何ですか?適切なバージョンを選択するにはどうすればよいですか? Node.js のバージョン間の違いは何ですか?適切なバージョンを選択するにはどうすればよいですか? Aug 01, 2022 pm 08:00 PM

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

Nodeを使用して軽量プロセスプールとスレッドプールを実装する方法について話しましょう Nodeを使用して軽量プロセスプールとスレッドプールを実装する方法について話しましょう Oct 14, 2022 pm 08:05 PM

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

Node.js はどのようにバージョン管理を実行しますか?共有できる 3 つの実用的なバージョン管理ツール Node.js はどのようにバージョン管理を実行しますか?共有できる 3 つの実用的なバージョン管理ツール Aug 10, 2022 pm 08:20 PM

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

この記事は、npm の原理を理解するのに役立ちます。 この記事は、npm の原理を理解するのに役立ちます。 Aug 09, 2022 am 09:23 AM

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

IDEA で Node.js を構成してインストールするにはどうすればよいですか?メソッドの簡単な分析 IDEA で Node.js を構成してインストールするにはどうすればよいですか?メソッドの簡単な分析 Dec 21, 2022 pm 08:28 PM

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

非同期リソースとは何ですか?非同期リソースコンテキスト共有を実現する Node の方法の簡単な分析 非同期リソースとは何ですか?非同期リソースコンテキスト共有を実現する Node の方法の簡単な分析 May 31, 2022 pm 12:56 PM

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

ノードに複数のバージョンをインストールし、それらを切り替える方法の詳細な説明 ノードに複数のバージョンをインストールし、それらを切り替える方法の詳細な説明 May 27, 2022 pm 08:33 PM

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

Nodejs を使用して QR コードを生成する方法を参照してください。 Nodejs を使用して QR コードを生成する方法を参照してください。 Oct 25, 2022 am 09:28 AM

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

See all articles