Ich habe nodejs verwendet, um mehr als 10.000 Hintergrundbilder für Frauen und Schwestern zu erklimmen

"Dieser Artikel nimmt am technischen Themenaufruf für Node.js Advanced Road teil. Klicken Sie hier, um Details anzuzeigen . "

Vorwort

Hallo zusammen, ich bin Xiaoma, warum muss ich so viele Bilder herunterladen? Ich habe vor ein paar Tagen ein kostenloses Wallpaper-Applet mit uni-app + uniCloud bereitgestellt und brauche dann einige Ressourcen, um das Applet mit Inhalten zu füllen.

Krabbelbilder

Initialisieren Sie zuerst das Projekt und installieren Sie axiosandcheerio

npm init -y && npm i axios cheerio
复制代码

axiosWird zum Crawlen von Webinhalten verwendet, es cheerioist die jquery-API auf der Serverseite, wir verwenden sie, um die Bildadresse im Dom zu erhalten;

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
}
复制代码

Auf diese Weise können Sie die Bild-URL auf der Seite abrufen. Als nächstes müssen Sie das Bild entsprechend der URL herunterladen.

So laden Sie Dateien mit nodejs herunter

Methode 1: Verwenden Sie die integrierten Module „https“ und „fs“.

Das Herunterladen von Dateien mit node js kann mit integrierten Paketen oder Bibliotheken von Drittanbietern erfolgen.

Die GET-Methode wird mit HTTPS verwendet, um die herunterzuladende Datei abzurufen. createWriteStream()ist eine Methode zum Erstellen eines beschreibbaren Streams, die nur einen Parameter akzeptiert, nämlich den Speicherort der Datei. Pipe()ist eine Methode, die Daten aus einem lesbaren Stream liest und in einen beschreibbaren Stream schreibt.

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')
  })
})
复制代码

Methode 2: DownloadHelper

npm install node-downloader-helper
复制代码

Unten ist der Code, um das Bild von der Website herunterzuladen. Ein Objekt dl wird von der Klasse DownloadHelper erstellt, die zwei Parameter erhält:

  1. Das herunterzuladende Bild.
  2. Der Pfad, in dem das Bild nach dem Herunterladen gespeichert werden muss.

Die File-Variable enthält die URL des Bildes, das heruntergeladen wird, und die filePath-Variable enthält den Pfad, in dem die Datei gespeichert wird.

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()
复制代码

Methode 3: Verwenden Sie den Download

Geschrieben von npm god sindresorhus , sehr einfach zu bedienen

npm install download
复制代码

Unten ist der Code, um das Bild von der Website herunterzuladen. Die Downloadfunktion erhält eine Datei und einen Dateipfad.

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')
})
复制代码

endgültiger Code

Ursprünglich wollte Baidu Wallpaper klettern, aber die Auflösung war nicht genug, und es gab auch Wasserzeichen usw. Später fand ein kleiner Partner in der Gruppe eine API, die als hochauflösendes Wallpaper auf einer mobilen APP geschätzt wird, und Die Download-URL kann direkt abgerufen werden. Ich habe sie direkt verwendet.

Unten ist der vollständige Code

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()
复制代码

Legen Sie im obigen Code zuerst eine Verzögerung von 3 Sekunden User-Agentfest , die verhindern kann, dass der Server den Crawler blockiert und 403 direkt zurückgibt.

node index.jsDie Bilder werden automatisch heruntergeladen.

Krabbeln läuft

Erfahrung

Die WeChat-Applet-Sucherfahrung „Watermelon Gallery“ .

endlich

Die oben genannte Gruppe ist das "Ape Creation Camp" unter der Leitung von @大報大傑大廳. In der Gruppe gibt es viele Entwickler, die sich gegenseitig helfen können, Fragen zu beantworten und Technologien auszutauschen. Gleichzeitig werden auch die großen Hübschen dabei sein über Outsourcing, Nebenerwerb etc. teilen Ich bin interessiert Freunde können eine Nachricht hinterlassen "Join the Group".

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dieser Artikel ist hilfreich für Sie. Sie können auch auf meine vorherigen Artikel verweisen oder Ihre Gedanken und Erfahrungen im Kommentarbereich austauschen. Willkommen, um das Frontend gemeinsam zu erkunden.

Die erste Goldminenplattform in diesem Artikel, die Quelle des Ponyblogs

Supongo que te gusta

Origin juejin.im/post/7078206989402112037
Recomendado
Clasificación