検索
ホームページウェブフロントエンドjsチュートリアルNode.jsを使った簡単な画像巡回機能の開発方法を詳しく解説

Node をクロールに使用するにはどうすればよいですか?次の記事では、Node.js を使用して簡単な画像クローリング機能を開発する方法について説明します。

Node.jsを使った簡単な画像巡回機能の開発方法を詳しく解説

クローラーの主な目的は、インターネット上で公開されている特定のデータを収集することです。このデータを使用して、いくつかの傾向を分析して比較したり、深層学習などのモデルをトレーニングしたりできます。この号では、Web クローリングに特別に使用される node.js パッケージ - node-crawler を紹介し、それを使用して、画像をクロールする単純なクローラー ケースを完成させます。 Web ページに保存され、ローカルにダウンロードされます。

Text

node-crawler は、効率と利便性の両方を考慮した軽量の node.js クローラー ツールです。 、分散クローラー システムをサポートし、ハード コーディングをサポートし、http フロントレベル プロキシをサポートします。さらに、これは完全に nodejs によって記述されており、本質的にノンブロッキングの非同期 IO をサポートしているため、クローラーのパイプライン操作メカニズムに非常に便利です。同時に、DOM の素早い選択をサポートしています (jQuery 構文を使用できます)。Web の特定の部分を取得するタスクのキラー関数と言えます。正規表現を手書きする必要がなくなり、Reptileの開発効率が向上します。

インストールと導入

最初に新しいプロジェクトを作成し、エントリ ファイルとしてindex.jsを作成します。

次に、クローラー ライブラリ node-crawler をインストールします。

# PNPM
pnpm add crawler
# NPM
npm i -S crawler
# Yarn 
yarn add crawler

次に、require を使用してそれを導入します。

// index.js
const Crawler = require("crawler");

インスタンスの作成

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

ここからはHTMLページの画像を取得するメソッドを書いていきます。crawlerインスタンス化後は主に配置されます。書き込みリンクおよびコールバック メソッドのキューに追加されます。このコールバック関数は、各リクエストが処理された後に呼び出されます。

ここで、Crawlerrequest ライブラリを使用するため、Crawler で設定できるパラメータ リストは であることを説明したいと思います。 request ライブラリのパラメーターのスーパーセット、つまり request ライブラリ内のすべての設定は Crawler に適用できます。

要素キャプチャ

おそらく、今 jQuery パラメーターも見たでしょう。ご想像のとおり、jQuery の構文を使用してキャプチャできます。 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();
        }
    })
}

$ がリクエスト内の img タグをキャプチャするために使用されたことがわかります。次に、次のロジックを使用して完成した画像へのリンクを処理し、後で保存して名前を付けられるように名前を削除します。ここでは配列も定義されており、その目的はキャプチャされた画像アドレスを保存することです。次のキャプチャで同じ画像アドレスが見つかった場合、ダウンロードは繰り返し処理されません。

以下は、ナゲッツのホームページ HTML で $("img") を使用して出力される情報です:

Node.jsを使った簡単な画像巡回機能の開発方法を詳しく解説

写真をダウンロード

ダウンロードする前に、nodejs パッケージをインストールする必要があります—— axios、はい、その通りです、axios フロントエンドに提供するだけでなく、バ​​ックエンドでも利用できます。ただし、画像のダウンロードはデータ ストリームに処理する必要があるため、responseTypestream に設定されます。次に、pipe メソッドを使用してデータ フロー ファイルを保存できます。

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();
    })
}

画像が大量にある可能性があるため、1つのフォルダーに入れたい場合は、そのようなフォルダーがあるかどうかを確認する必要があり、ない場合はフォルダーを作成します。次に、createWriteStream メソッドを使用して、取得したデータ ストリームをファイルの形式でフォルダーに保存します。

それでは、試してみましょう。たとえば、Nuggets ホームページの HTML の下にある画像をキャプチャします:

// index.js
getImages("https://juejin.cn/")

実行後、静的 HTML 内のすべての画像が保存されていることがわかります。捕らえられた。

node index.js

Node.jsを使った簡単な画像巡回機能の開発方法を詳しく解説

結論

最後に、このコードが SPA で機能しない可能性があることもわかります。 (単一ページのアプリケーション)。シングルページ アプリケーションには HTML ファイルが 1 つだけあり、Web ページ上のすべてのコンテンツは動的にレンダリングされるため、内容は変わりません。何があっても、そのデータ リクエストを直接処理して、必要な情報を収集できます。 。

もう 1 つ言っておきたいのは、多くの友人が画像をダウンロードするリクエストを処理するときに request.js を使用しているということです。もちろん、これは可能であり、必要なコードも少なくなりますが、何が言いたいかというと、このライブラリは 2020 年に非推奨になりました。更新および保守されているライブラリに置き換えることをお勧めします。

Node.jsを使った簡単な画像巡回機能の開発方法を詳しく解説

ノード関連の知識について詳しくは、nodejs チュートリアルをご覧ください。

以上がNode.jsを使った簡単な画像巡回機能の開発方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は掘金社区で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Node.js各版本间有什么区别?如何选择合适的版本?Node.js各版本间有什么区别?如何选择合适的版本?Aug 01, 2022 pm 08:00 PM

Node.js 有 LTS 版本和 Current 版本,这两种版本有什么区别?下面本篇文章带大家快速掌握 Node.js 版本的区别,并聊聊如何选择合适的版本,希望对大家有所帮助!

聊聊使用Node如何实现轻量化进程池和线程池聊聊使用Node如何实现轻量化进程池和线程池Oct 14, 2022 pm 08:05 PM

Node.js 的是一门单线程的语言,它基于 V8 引擎开发,v8 在设计之初是在浏览器端对 JavaScript 语言的解析运行引擎,其最大的特点是单线程,这样的设计避免了一些多线程状态同步问题,使得其更轻量化易上手。

Node.js如何进行版本管理?3款实用版本管理工具分享Node.js如何进行版本管理?3款实用版本管理工具分享Aug 10, 2022 pm 08:20 PM

Node.js如何进行版本管理?下面本篇文章给大家整理分享3 款非常实用的 Node.js 版本管理工具,希望对大家有所帮助!

node爬取数据实例:抓取宝可梦图鉴并生成Excel文件node爬取数据实例:抓取宝可梦图鉴并生成Excel文件Aug 26, 2022 pm 08:31 PM

怎么用Node.js爬取网页的数据并写入Excel文件?下面本篇文章通过一个实例来讲解一下用Node.js爬取网页的数据并生成Excel文件的方法,希望对大家有所帮助!

IDEA中怎么配置安装node.js?方法浅析IDEA中怎么配置安装node.js?方法浅析Dec 21, 2022 pm 08:28 PM

IDEA中怎么运行node?下面本篇文章给大家介绍一下IDEA中配置安装并运行node.js的方法,希望对大家有所帮助!

看看怎么使用nodejs生成二维码看看怎么使用nodejs生成二维码Oct 25, 2022 am 09:28 AM

​二维码在生活中无处不在,之前我也使用过java的zxing库生成过二维码,功能很强大。但是其实nodejs上也有很多第三方库能够生成二维码。今天我们就是使用qrcode这个库来生成二维码。

聊聊怎么使用Node将Excel转为JSON聊聊怎么使用Node将Excel转为JSONNov 28, 2022 pm 08:02 PM

怎么使用Node将Excel转为JSON?下面本篇文章给大家介绍一下Node中转换Excel成JSON的方法,希望对大家有所帮助!

详解node中如何安装多版本并进行切换详解node中如何安装多版本并进行切换May 27, 2022 pm 08:33 PM

本篇文章给大家深入了解一下多版本node的安装方法,并详细介绍一下node版本切换方法,希望对大家有所帮助!

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン