Rumah > hujung hadapan web > tutorial js > Penjelasan terperinci tentang cara menggunakan Node.js untuk membangunkan fungsi merangkak imej yang mudah

Penjelasan terperinci tentang cara menggunakan Node.js untuk membangunkan fungsi merangkak imej yang mudah

青灯夜游
Lepaskan: 2022-06-30 19:55:50
ke hadapan
2577 orang telah melayarinya

Bagaimana untuk menggunakan Nod untuk merangkak? Artikel berikut akan bercakap tentang menggunakan Node.js untuk membangunkan fungsi merangkak imej yang mudah saya harap ia akan membantu anda!

Penjelasan terperinci tentang cara menggunakan Node.js untuk membangunkan fungsi merangkak imej yang mudah

Tujuan utama perangkak adalah untuk mengumpul beberapa data khusus yang tersedia secara umum di Internet. Menggunakan data ini, kami boleh menganalisis beberapa aliran dan membandingkannya, atau melatih model untuk pembelajaran mendalam, dsb. Dalam isu ini, kami akan memperkenalkan pakej node.js yang digunakan khas untuk rangkak web - node-crawler, dan kami akan menggunakannya untuk melengkapkan bekas perangkak mudah untuk merangkak imej pada halaman web dan memuat turunnya secara setempat.

Teks

node-crawler ialah alat perangkak node.js ringan yang mengambil kira kecekapan dan kemudahan, menyokong sistem perangkak teragih dan menyokong pengekodan keras , menyokong http proksi peringkat hadapan. Selain itu, ia ditulis sepenuhnya oleh nodejs dan sememangnya menyokong IO tak segerak yang tidak menyekat, yang memberikan kemudahan yang hebat untuk mekanisme operasi saluran paip perangkak. Ia juga menyokong pemilihan pantas DOM (anda boleh menggunakan sintaks jQuery), yang boleh dikatakan sebagai ciri pembunuh untuk merangkak bahagian tertentu halaman web. Tidak perlu menulis ungkapan biasa dengan tangan meningkatkan kecekapan pembangunan crawler.

Pemasangan dan pengenalan

Kami mula-mula mencipta projek baharu dan mencipta index.js sebagai fail kemasukan.

Kemudian pasang pustaka perangkak node-crawler .

# PNPM
pnpm add crawler
# NPM
npm i -S crawler
# Yarn 
yarn add crawler
Salin selepas log masuk

dan kemudian gunakan require untuk memperkenalkannya.

// index.js
const Crawler = require("crawler");
Salin selepas log masuk

Buat contoh

// index.js
let crawler = new Crawler({
    timeout:10000,
    jQuery:true,
})
function getImages(uri) {
    crawler.queue({
        uri,
        callback: (err, res, done) => {
            if (err) throw err;
        }
    })
}
Salin selepas log masuk

Mulai sekarang kami akan mula menulis kaedah untuk mendapatkan imej halaman html crawler Selepas instantiasi, ia diletakkan terutamanya dalam baris gilirnya untuk pautan Tulis dan kaedah panggil balik. Fungsi panggil balik ini akan dipanggil selepas setiap permintaan diproses.

Saya juga ingin menerangkan di sini bahawa Crawler menggunakan pustaka request, jadi senarai parameter yang tersedia untuk konfigurasi dalam Crawler ialah superset parameter pustaka request, iaitu , semua parameter dalam pustaka request Konfigurasi boleh digunakan untuk Crawler.

Tangkapan Elemen

Mungkin anda juga melihat parameter jQuery tadi. Anda meneka dengan betul, ia boleh menggunakan sintaks jQuery untuk menangkap elemen DOM.

// index.js
let data = []
function getImages(uri) {
    crawler.queue({
        uri,
        callback: (err, res, done) => {
            if (err) throw err;
            let $ = res.$;
            try {
                let $imgs = $("img");
                Object.keys($imgs).forEach(index => {
                    let img = $imgs[index];
                    const { type, name, attribs = {} } = img;
                    let src = attribs.src || "";
                    if (type === "tag" && src && !data.includes(src)) {
                        let fileSrc = src.startsWith('http') ? src : `https:${src}`
                        let fileName = src.split("/")[src.split("/").length-1]
                        downloadFile(fileSrc, fileName) // 下载图片的方法
                        data.push(src)
                    }
                });
            } catch (e) {
                console.error(e);
                done()
            }
            done();
        }
    })
}
Salin selepas log masuk

Anda dapat melihat bahawa anda baru sahaja menggunakan $ untuk menangkap teg img dalam permintaan. Kemudian kami menggunakan logik berikut untuk memproses pautan ke imej yang lengkap dan menanggalkan nama supaya ia boleh disimpan dan dinamakan kemudian. Tatasusunan juga ditakrifkan di sini, tujuannya adalah untuk menyimpan alamat imej yang ditangkap Jika alamat imej yang sama ditemui dalam tangkapan seterusnya, muat turun tidak akan diproses berulang kali.

Berikut ialah maklumat yang dicetak menggunakan $("img") untuk menangkap html halaman utama Nuggets:

Penjelasan terperinci tentang cara menggunakan Node.js untuk membangunkan fungsi merangkak imej yang mudah

Muat turun imej

Sebelum memuat turun, kita perlu memasang pakej nodejs - axios, ya anda membacanya dengan betul, axios bukan sahaja disediakan untuk bahagian hadapan, ia juga boleh digunakan oleh hujung belakang. Tetapi kerana memuat turun imej memerlukan pemprosesannya menjadi aliran data, responseType ditetapkan kepada stream. Kemudian anda boleh menggunakan kaedah pipe untuk menyimpan fail aliran data.

const { default: axios } = require("axios");
const fs = require('fs');

async function downloadFile(uri, name) {
    let dir = "./imgs"
    if (!fs.existsSync(dir)) {
        await fs.mkdirSync(dir)
    }
    let filePath = `${dir}/${name}`
    let res = await axios({
        url: uri,
        responseType: 'stream'
    })
    let ws = fs.createWriteStream(filePath)
    res.data.pipe(ws)
    res.data.on("close",()=>{
        ws.close();
    })
}
Salin selepas log masuk

Oleh kerana mungkin terdapat banyak gambar, jadi ia perlu dimasukkan ke dalam satu folder Anda perlu menentukan sama ada terdapat folder sedemikian dan menciptanya jika tidak. Kemudian gunakan kaedah createWriteStream untuk menyimpan aliran data yang diperoleh ke dalam folder dalam bentuk fail.

Kemudian kita boleh mencubanya Sebagai contoh, kita menangkap gambar di bawah html laman utama Nuggets:

// index.js
getImages("https://juejin.cn/")
Salin selepas log masuk

Selepas pelaksanaan, kita dapati semua gambar dalam html statik. telah ditangkap.

node index.js
Salin selepas log masuk

Penjelasan terperinci tentang cara menggunakan Node.js untuk membangunkan fungsi merangkak imej yang mudah

Kesimpulan

Pada akhirnya, anda juga dapat melihat bahawa kod ini mungkin tidak Sesuai untuk SPA (Single Page Application). Memandangkan hanya terdapat satu fail HTML dalam aplikasi satu halaman, dan semua kandungan pada halaman web dipaparkan secara dinamik, tidak kira apa pun, anda boleh mengendalikan permintaan datanya secara langsung untuk mengumpul maklumat yang anda inginkan .

Seperkara lagi yang perlu diperkatakan ialah ramai rakan menggunakan request.js untuk mengendalikan permintaan untuk memuat turun imej Sudah tentu, ini mungkin, malah ia memerlukan kod yang lebih sedikit perpustakaan adalah sangat penting pada tahun 2020. Ia telah ditamatkan sejak 2001. Adalah lebih baik untuk menukar kepada perpustakaan yang telah dikemas kini dan diselenggara.

Penjelasan terperinci tentang cara menggunakan Node.js untuk membangunkan fungsi merangkak imej yang mudah

Untuk lebih banyak pengetahuan berkaitan nod, sila lawati: tutorial nodejs!

Atas ialah kandungan terperinci Penjelasan terperinci tentang cara menggunakan Node.js untuk membangunkan fungsi merangkak imej yang mudah. 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