


Perkongsian praktikal: Gunakan nodej untuk merangkak dan memuat turun lebih daripada 10,000 imej
Artikel ini akan berkongsi dengan anda pengalaman praktikal nod untuk melihat cara pengarang menggunakan nodej untuk merangkak lebih daripada 10,000 kertas dinding adik perempuan saya harap ia dapat membantu semua orang.
Helo, semua, saya Xiaoma, kenapa saya perlu memuat turun begitu banyak gambar? Beberapa hari yang lalu, saya menggunakan uni-app uniCloud untuk menggunakan applet kertas dinding secara percuma Kemudian saya memerlukan beberapa sumber untuk mengisi applet dengan kandungan.
Imej merangkak
Mula-mula mulakan projek dan pasang axios
dan cheerio
npm init -y && npm i axios cheerio
axios
untuk merangkak kandungan web, cheerio
Ia adalah jquery api di bahagian pelayan, kami menggunakannya untuk mendapatkan alamat imej dalam 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 }
Dengan cara ini, kami boleh mendapatkan url imej dalam halaman. Seterusnya, anda perlu memuat turun imej mengikut url.
Cara menggunakan nodejs untuk memuat turun fail
Kaedah 1: Gunakan modul terbina dalam 'https' dan 'fs'
Gunakan nodejs Memuat turun fail boleh dilakukan menggunakan pakej terbina dalam atau perpustakaan pihak ketiga.
Kaedah GET digunakan dengan HTTPS untuk mendapatkan fail untuk dimuat turun. createWriteStream()
ialah kaedah yang digunakan untuk mencipta strim boleh tulis Ia hanya menerima satu parameter, iaitu lokasi di mana fail disimpan. Pipe()
ialah kaedah yang membaca data daripada strim boleh dibaca dan menulisnya ke strim boleh ditulis.
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') }) })
Kaedah 2: DownloadHelper
npm install node-downloader-helper
Berikut ialah kod untuk memuat turun imej daripada tapak web. Objek dl dicipta oleh kelas DownloadHelper, yang menerima dua parameter:
- Imej yang akan dimuat turun.
- Laluan di mana imej mesti disimpan selepas memuat turun.
Pembolehubah Fail mengandungi URL imej yang akan dimuat turun dan pembolehubah filePath mengandungi laluan ke fail yang akan disimpan.
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()
Kaedah 3: Gunakan muat turun
ditulis oleh npm master sindresorhus, ia sangat mudah digunakan
npm install download
Berikut ialah kod untuk memuat turun imej daripada tapak web. Fungsi muat turun menerima laluan fail dan fail.
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') })
Kod akhir
Saya pada asalnya ingin merangkak kertas dinding Baidu, tetapi peleraian tidak mencukupi, dan terdapat tera air, dsb. Kemudian, seorang rakan dalam kumpulan menemui API. Ia mungkin kertas dinding definisi tinggi pada APP mudah alih tertentu Anda boleh mendapatkan URL muat turun terus, jadi saya menggunakannya secara terus.
Berikut ialah kod lengkap
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()
Dalam kod di atas, anda mesti terlebih dahulu menetapkan User-Agent
dan menetapkan kelewatan 3s Ini boleh menghalang pelayan daripada menyekat perangkak dan secara langsung kembali 403.
Terus node index.js
dan gambar akan dimuat turun secara automatik.
,
Pengalaman
!Pengalaman carian applet WeChat "Galeri Tembikai".
https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c5301b8b97094e92bfae240d7eb1ec5e~tplv-k3u1fbpfcp-zoom-1.a>tutorial nodejs
Atas ialah kandungan terperinci Perkongsian praktikal: Gunakan nodej untuk merangkak dan memuat turun lebih daripada 10,000 imej. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Node.js mempunyai versi LTS dan versi Semasa Apakah perbezaan antara kedua-dua versi ini? Artikel berikut akan membantu anda memahami dengan cepat perbezaan antara versi Node.js, dan bercakap tentang cara memilih versi yang sesuai, saya harap ia akan membantu anda.

Node.js ialah bahasa berutas tunggal Ia dibangunkan berdasarkan enjin V8 pada asalnya direka untuk menghuraikan dan menjalankan bahasa JavaScript pada bahagian pelayar Isu penyegerakan keadaan berbilang benang menjadikannya lebih ringan dan lebih mudah untuk digunakan.

Bagaimanakah Node.js melaksanakan pengurusan versi? Artikel berikut akan berkongsi dengan anda 3 alat pengurusan versi Node.js yang sangat praktikal, saya harap ia akan membantu anda!

npm ialah alat pengurusan pakej dunia JavaScript dan merupakan alat pengurusan pakej lalai untuk platform Node.js. Melalui npm, anda boleh memasang, berkongsi, mengedarkan kod dan mengurus kebergantungan projek. Artikel ini akan membawa anda melalui prinsip npm, saya harap ia akan membantu anda!

Bagaimana untuk menjalankan nod dalam IDEA? Artikel berikut akan memperkenalkan kepada anda cara mengkonfigurasi, memasang dan menjalankan node.js dalam IDEA Saya harap ia akan membantu anda!

Bagaimanakah Node.js melaksanakan perkongsian konteks sumber tak segerak? Artikel berikut akan memperkenalkan kepada anda cara Node melaksanakan perkongsian konteks sumber tak segerak Mari kita bincangkan tentang penggunaan perkongsian konteks sumber tak segerak untuk kita.

Artikel ini menggunakan kes membaca dan menulis fail serta memproses laluan untuk mengetahui tentang modul fail fs dan modul laluan dalam Node.

Kod QR ada di mana-mana dalam kehidupan Saya juga telah menggunakan perpustakaan zxing Java untuk menjana kod QR sebelum ini, dan ia sangat berkuasa. Tetapi sebenarnya, terdapat banyak perpustakaan pihak ketiga pada nodej yang boleh menjana kod QR. Hari ini kami menggunakan perpustakaan qrcode untuk menjana kod QR.
