今回は、Node が Puppeteer をクローラーとして使用する場合の注意点について説明します。以下は実際のケースです。
アーキテクチャ図
Puppeteerのアーキテクチャ図
PuppeteerはdevToolsを通じてブラウザと通信します
ブラウザ 複数のページを持つことができるブラウザ(chroium)インスタンス
少なくともページが含まれますフレーム ページ
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 の状態オブジェクトの使用方法の概要
以上がノードは Puppeteer をクローラーとして使用しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

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

WebStorm Mac版
便利なJavaScript開発ツール

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ホットトピック









