
VUE3.0 をすぐに始める方法: 学習に入る
こんにちは、皆さん、私は Xiaoma です。なぜそんなにたくさんの写真をダウンロードする必要があるのですか? 数日前、uni-app + uniCloud を使用して壁紙アプレットを無料でデプロイしました。その後、アプレットのコンテンツを埋めるためにいくつかのリソースが必要です。
まずプロジェクトを初期化し、 axiosとcheerioをインストールします
npm init -y && npm i axios Cheerio
cheerio axios 、サーバー側の jquery API です。 dom;
const axios = require('axios')
const チェリオ = require('チェリオ')
function getImageUrl(target_url,containerEelment) {
let result_list = []
const res = await axios.get(target_url)
const html = res.data
const $ = チェリオ.load(html)
const result_list = []
$(containerEelment).each((要素) => {
result_list.push($(要素).find('img').attr('src'))
})
結果リストを返す
このようにして、ページ内の画像の URL を取得できます。次に、URLに従って画像をダウンロードする必要があります。
方法 1: 組み込みモジュール「https」と「fs」を使用する
nodejs を使用したファイルのダウンロードは、組み込みパッケージまたはサードパーティのライブラリを使用して実行できます。
GET メソッドは、ダウンロードするファイルを取得するために HTTPS で使用されます。 createWriteStream()書き込み可能なストリームを作成するために使用されるメソッドです。このメソッドは、ファイルの保存場所であるパラメーターを 1 つだけ受け取ります。 Pipe()読み取り可能なストリームからデータを読み取り、書き込み可能なストリームにデータを書き込むメソッドです。
const fs = require('fs')
const https = require('https')
//画像のURL
const url = 'GFG.jpeg'
https.get(url, (res) => {
// 画像はこのパスに保存されます
const path = `${__dirname}/files/img.jpeg`
const filePath = fs.createWriteStream(パス)
res.pipe(ファイルパス)
filePath.on('finish', () => {
ファイルパス.close()
console.log('ダウンロードが完了しました')
})
})方法 2: DownloadHelper
npm install node-downloader-helper
以下は、Web サイトから画像をダウンロードするコードです。オブジェクト dl は、DownloadHelper クラスによって作成され、
File 変数にはダウンロードされる画像の URL が含まれ、filePath 変数には保存されるファイルへのパスが含まれます。
const { DownloaderHelper } = require('node-downloader-helper')
//画像のURL
const ファイル = 'GFG.jpeg'
// 画像がダウンロードされるパス
const filePath = `${__dirname}/files`
const dl = 新しい DownloaderHelper(ファイル, ファイルパス)
dl.on('終了', () => console.log('ダウンロード完了'))
dl.start()メソッド 3: ダウンロードを使用します。
これは npm master sindresorhus によって作成されています。使い方は非常に簡単です。
以下は、Web サイトから画像をダウンロード
するためのコードです。ダウンロード関数は、ファイルとファイル パスを受け取ります。
const download = require('ダウンロード')
// 画像のURL
const ファイル = 'GFG.jpeg'
// 画像がダウンロードされるパス
const filePath = `${__dirname}/files`
ダウンロード(ファイル, ファイルパス).then(() => {
console.log('ダウンロードが完了しました')
})元々、Baidu の壁紙をクロールすることを目的としていましたが、解像度が十分ではなく、透かしなどが含まれていました。その後、グループの友人が API を見つけました。これは、おそらく特定のモバイル APP の高解像度の壁紙でした。 、直接使用できました ダウンロードURLを取得した後、直接使用しました。
以下は完全なコードです
const download = require('download')
const axios = require('axios')
ヘッダー = { にします
「ユーザーエージェント」:
'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/87.0.4280.88 Safari/537.36',
}
関数スリープ(時間) {
return new Promise((reslove) => setTimeout(reslove, time))
}
非同期関数ロード(スキップ = 0) {
const data = axios を待つ
。得る(
'http://service.picasso.adesk.com/v1/vertical/category/4e4d610cdf714d2966000000/vertical',
{
ヘッダー、
パラメータ: {
limit: 30, // ページごとに 30 項目を返す固定のスキップ: Skip,
最初: 0、
注文:「ホット」、
}、
}
)
.then((res) => {
res.data.res.vertical を返す
})
.catch((err) => {
コンソールログ(エラー)
})
ダウンロードを待つファイル(データ)
スリープを待つ(3000)
if (スキップ < 1000) {
ロード(スキップ + 30)
} それ以外 {
console.log('ダウンロードが完了しました')
}
}
非同期関数 downloadFile(data) {
for (let インデックス = 0; インデックス < data.length; インデックス++) {
const item = データ[インデックス]
// 画像がダウンロードされるパス
const filePath = `${__dirname}/beauty`
ダウンロードを待つ(item.wp, filePath, {
ファイル名: item.id + '.jpeg'、
ヘッダー、
}).then(() => {
console.log(`${item.id} のダウンロードが完了しました`)
戻る
})
}
}
上記のload()のコードでは、
最初にUser-Agent設定し、3秒の遅延を設定する必要があります。これにより、サーバーがクローラをブロックして直接403を返すことを防ぐことができます。
node index.js使用するだけで、画像が自動的にダウンロードされます。
、
「スイカギャラリー」のWeChatミニプログラム検索体験
https://p6-juejin.byreimg.com/tos-cn-i-k3u1fbpfcp/c5301b8b97094e92bfae240d7eb1ec5e~tplv-k3u1fbpfcp-zoom-1.awebp?