検索
ホームページウェブフロントエンドjsチュートリアルノードは Puppeteer をクローラーとして使用します

今回は、Node が Puppeteer をクローラーとして使用する場合の注意点について説明します。以下は実際のケースです。

アーキテクチャ図

Puppeteerのアーキテクチャ図

  1. PuppeteerはdevToolsを通じてブラウザと通信します

  2. ブラウザ 複数のページを持つことができるブラウザ(chroium)インスタンス

  3. 少なくともページが含まれますフレーム ページ

  4. Frame には JavaScript を実行するための実行環境が少なくとも 1 つあり、複数の実行環境を拡張することもできます

前書き

最近デスクトップコンピューターを購入したいのですが、ラップトップの i5 で Web ページを開いているのですがvscをプレイすると明らかにラグがあるので、タオバオで直接検索するとページをめくらなければならないし、画像が多すぎて私の頭の容量では処理できないので、i7 + GTX1070TIまたはGTX1080TIのコンピューターを搭載する予定です。いくつかのデータをクロールし、最近の価格傾向をグラフィカルに分析します。そこで、Puppeteer を使用して関連データをクロールするクローラーを作成しました。

パペッティアとは何ですか?

Puppeteer は、DevTools プロトコルを介してヘッドレス Chrome または Chromium を制御するための高レベル API を提供するノード ライブラリです。完全な (非ヘッドレス) Chrome または Chromium を使用するように構成することもできます。

つまり、この製品は、は、高レベルの API を提供するノード ライブラリであり、devtool を介してヘッドレス モードで chrome または chromium を制御でき、ヘッドレス モードで人間の操作をシミュレートできます。

と Cheerio

cherrico の違いは、本質的には、Web ページ内のデータが動的に取得される場合にのみ、jquery のような構文を使用して HTML ドキュメントを操作するライブラリです。 ajax の場合、対応するデータをクロールできません。 Puppeteer は、ブラウザーの動作環境をシミュレートし、Web サイト情報をリクエストし、Web サイトの内部ロジックを実行できます。その後、WS プロトコルを通じてページ内のデータを動的に取得し、任意のシミュレートされた操作 (クリック、スライド、ホバーなど) を実行でき、ページ ジャンプと複数ページの管理をサポートします。ノード上のスクリプトをブラウザの内部環境に挿入して実行することもできます。つまり、Web ページ上で実行できることはすべて実行できますが、実行できないことも実行できます。

スタート

この記事は段階的なチュートリアルではないため、Puppeteer API の基本的な知識が必要です。理解できない場合は、まず公式の紹介文を読んでください
Puppeteer 公式サイト
PuppeteerAPI

まず、クロールする Web サイトの情報を観察します。GTX1080 です。

これは、クロールする必要がある Taobao の Web ページです。その構造を注意深く分析した後、クロールする必要があるコンテンツは、真ん中の商品アイテムだけです。 endにはそのような機能があります。

私が使用している Typescript は、Puppetter と関連ライブラリの完全な API ヒントを取得できます。TS を知らない場合は、関連するコードを ES 構文に変更するだけで済みます

// 引入一些需要用到的库以及一些声明
import * as puppeteer from 'puppeteer' // 引入Puppeteer
import mongo from '../lib/mongoDb' // 需要用到的 mongodb库,用来存取爬取的数据
import chalk from 'chalk' // 一个美化 console 输出的库
const log = console.log // 缩写 console.log
const TOTAL_PAGE = 50 // 定义需要爬取的网页数量,对应页面下部的跳转链接
// 定义要爬去的数据结构
interface IWriteData { 
 link: string // 爬取到的商品详情链接
 picture: string // 爬取到的图片链接
 price: number // 价格,number类型,需要从爬取下来的数据进行转型
 title: string // 爬取到的商品标题
}
// 格式化的进度输出 用来显示当前爬取的进度
function formatProgress (current: number): string { 
 let percent = (current / TOTAL_PAGE) * 100
 let done = ~~(current / TOTAL_PAGE * 40)
 let left = 40 - done
 let str = `当前进度:[${''.padStart(done, '=')}${''.padStart(left, '-')}]  ${percent}%`
 return str
}

次に、クローラーのメイン ロジックの入力を開始します

// 因为我们需要用到大量的 await 语句,因此在外层包裹一个 async function
async function main() {
 // Do something
}
main()
rree

考え方

1. Typescript を使用する理由

Typescript は使いやすいので、Puppeteer の API をすべて覚えることはできませんし、それらをすべてチェックすることもしたくありません。そのため、TS を使用すると、インテリジェントなリマインダーが提供され、スペルに起因する低レベルのエラーを回避できます。基本的に、TS を使用した後、コードをもう一度入力することができます

puppeteer.png

2. クローラーのパフォーマンスの問題は何ですか?

Puppeteerはブラウザを起動して内部ロジックを実行するため、大量のメモリを消費します コンソールを見ると、このノードプロセスは約300MBのメモリを消費します。

私のページは 1 つずつクロールされます。より高速にクロールしたい場合は、複数のプロセスを開始できます。V8 はシングルスレッドなので、1 つのプロセスで複数のページを開くのは意味がありません。もちろん、パラメータはノード クラスタを通じて実装することもできますが、一方では、クローリング プロセス中に異なる待機時間を設定することもあります。ウェブページ; 私がクローラー爆弾であることを淘宝網に認識させないようにするため

3. Puppeteer のその他の機能

これは Puppeteer のいくつかの基本機能のみを使用しています。実際には、Puppeteer にはさらに多くの機能があります。たとえば、ノード上の処理関数がブラウザ内で実行されるように導入され、現在のページが pdf または png 画像として保存されます。また、const browser = await puppeteer.launch({ headless: false }) を介してインターフェイス効果を備えたブラウザを起動することもでき、クローラがどのように動作するかを確認できます。さらに、ログインが必要な一部の Web サイトで、検証コードの処理を第三者に委託したくない場合は、ヘッドレスをオフにし、プログラムで待機時間を設定し、手動で一部の検証を完了することもできます。ログインの目的を達成します。

もちろん、Google はこのような素晴らしいライブラリを作成しました。このライブラリは、データのクロールに使用されるだけでなく、一部の自動パフォーマンス分析、インターフェイスのテスト、フロントエンド Web サイトの監視などにも使用されます。その他の側面 感想

一般に、データをクロールするクローラの作成は、このクローラで多くの基本的なスキルをテストする比較的複雑な演習プロジェクトであり、async、Promise、およびその他の関連知識を完全に理解する必要があります。 。データを収集するために DOM を分析するとき、ネイティブ メソッドを何度も使用して DOM 属性を取得しました (Web サイトに jquery がある場合は直接使用することもできますが、ない場合は外部インジェクションが必要です。レポートを回避するには、typescript でいくつかの設定が必要です)このようにして、DOM は jquery 構文を通じて操作できるようになり、DOM 関連の API の習熟度が検査されました。

さらに、これは単なるプロセス指向のプログラミングであり、操作用のクラスに完全にカプセル化できます。これにより、ES の OOP の理解もテストされます

この記事の事例を読んだ後は、この方法を習得したと思います。 php中国語ウェブサイトのその他の関連記事にも注目してください。

推奨読書:

vuex の状態オブジェクトの使用方法の概要


Angular を使用してコンポーネントを起動する方法

以上がノードは Puppeteer をクローラーとして使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
舞台裏:JavaScriptをパワーする言語は何ですか?舞台裏:JavaScriptをパワーする言語は何ですか?Apr 28, 2025 am 12:01 AM

JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

PythonとJavaScriptの未来:傾向と予測PythonとJavaScriptの未来:傾向と予測Apr 27, 2025 am 12:21 AM

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境