Rumah > hujung hadapan web > tutorial js > Perkongsian praktikal: Gunakan nodej untuk merangkak dan memuat turun lebih daripada 10,000 imej

Perkongsian praktikal: Gunakan nodej untuk merangkak dan memuat turun lebih daripada 10,000 imej

青灯夜游
Lepaskan: 2022-04-20 20:55:38
ke hadapan
4830 orang telah melayarinya

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.

Perkongsian praktikal: Gunakan nodej untuk merangkak dan memuat turun lebih daripada 10,000 imej

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
Salin selepas log masuk

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
}
Salin selepas log masuk

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')
  })
})
Salin selepas log masuk

Kaedah 2: DownloadHelper

npm install node-downloader-helper
Salin selepas log masuk

Berikut ialah kod untuk memuat turun imej daripada tapak web. Objek dl dicipta oleh kelas DownloadHelper, yang menerima dua parameter:

  1. Imej yang akan dimuat turun.
  2. 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()
Salin selepas log masuk

Kaedah 3: Gunakan muat turun

ditulis oleh npm master sindresorhus, ia sangat mudah digunakan

npm install download
Salin selepas log masuk

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')
})
Salin selepas log masuk

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(&#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()
Salin selepas log masuk

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.

Perkongsian praktikal: Gunakan nodej untuk merangkak dan memuat turun lebih daripada 10,000 imej, Perkongsian praktikal: Gunakan nodej untuk merangkak dan memuat turun lebih daripada 10,000 imej

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!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan