PHP と phpSpider: Web サイトのクローリング防止という JS の課題にどう対処するか?
インターネット技術の発展に伴い、クローラー スクリプトに対する Web サイトの防御力はますます強力になっています。 JavaScript はページ コンテンツを動的に生成できるため、単純なクローラー スクリプトが完全なデータを取得することが困難になるため、Web サイトではクロール防止に Javascript テクノロジーがよく使用されます。この記事では、PHP と phpSpider を使用して、Web サイトのクローリング防止という JS の課題に対処する方法を紹介します。
phpSpider は、PHP ベースの軽量クローラー フレームワークで、Web ページのさまざまなクローリング タスクの処理に適した、シンプルで使いやすい API と豊富な機能を提供します。その利点は、JavaScript コードの実行を含むブラウザーの動作をシミュレートできることであり、これにより Web サイトの JS アンチクローラー メカニズムをバイパスできるようになります。
まず、phpSpider をインストールする必要があります。 Composer を介してインストールし、プロジェクト ディレクトリで次のコマンドを実行できます。
composer require dungsit/php-spider
インストールが完了したら、phpSpider を使用してプロジェクトにクローラー スクリプトを作成できます。
まず、新しい phpSpider インスタンスを作成し、クロール対象の URL、HTTP ヘッダー情報などを設定する必要があります。以下は例です:
<?php require 'vendor/autoload.php'; use phpspidercorephpspider; $configs = array( 'name' => 'example', 'log_show' => true, 'domains' => array( 'example.com', ), 'scan_urls' => array( 'http://www.example.com' ), 'list_url_regexes' => array( "http://www.example.com/w+", ), 'content_url_regexes' => array( "http://www.example.com/[a-z]+/d+", ), 'fields' => array( array( 'name' => 'title', 'selector' => '//h1', 'required' => true, ), array( 'name' => 'content', 'selector' => '//div[@class="content"]', 'required' => true, ), ), ); $spider = new phpspider($configs); $spider->start();
上の例では、scan_urls
フィールドと list_url_regexes
フィールドを設定することによって、クロールする必要がある開始ページ URL を指定します。リスト ページの URL 正規表現を指定し、content_url_regexes
フィールドでコンテンツ ページの URL 正規表現を指定します。次の fields
フィールドでは、キャプチャするフィールド名、フィールド セレクター、および必須フィールドかどうかを設定できます。
私たちの目標は、Web サイトの JS アンチクローラー メカニズムをバイパスすることであるため、phpSpider のプラグインを使用して Javascript コードを実行する必要があります。 ExecuteJsPlugin
プラグインを使用すると、この機能を実現できます。このプラグインは、JavaScript コードを実行するブラウザ パッケージ ライブラリ Goutte
に基づいています。 phpSpider で ExecuteJsPlugin
プラグインを使用する方法の例を次に示します。
<?php require 'vendor/autoload.php'; use phpspidercorephpspider; use phpspidercoreequests; use phpspidercoreselector; use phpspiderpluginsexecute_jsExecuteJsPlugin; // 设置目标网站的域名和UA requests::set_global('domain', 'example.com'); requests::set_global('user_agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'); $configs = array( 'name' => 'example', 'log_show' => true, 'domains' => array( 'example.com', ), 'scan_urls' => array( 'http://www.example.com' ), 'list_url_regexes' => array( "http://www.example.com/w+", ), 'content_url_regexes' => array( "http://www.example.com/[a-z]+/d+", ), 'fields' => array( array( 'name' => 'title', 'selector' => '//h1', 'required' => true, ), array( 'name' => 'content', 'selector' => '//div[@class="content"]', 'required' => true, ), ), 'plugins' => array( new ExecuteJsPlugin(), ), ); $spider = new phpspider($configs); $spider->start();
上記の例では、最初に execute_jsExecuteJsPlugin
プラグインを導入しました。次に、ターゲット Web サイトのドメイン名とユーザー エージェント (UA) を設定します。これにより、phpSpider がターゲット Web サイトにアクセスしたときにブラウザーのリクエストをシミュレートできるようになります。次に、plugins
フィールドに ExecuteJsPlugin
インスタンスを追加しました。
このプラグインを使用すると、フィールドのセレクターで Javascript 式を使用して要素を見つけることができます。たとえば、セレクターを '//div[@class="content"]/q'
に設定します。これは、div 要素の class 属性が " であるサブ要素 q を選択することを意味します。コンテンツ"。このようにして、phpSpider はこの Javascript コードを実行してデータを取得できます。
要約すると、phpSpider フレームワークと ExecuteJsPlugin
プラグインを使用して、Web サイト上のクロール防止という JS の課題に対処できます。ブラウザの動作をシミュレートすることで、Web サイトの JS クローラー対策メカニズムをバイパスし、必要なデータを簡単に取得できます。この記事があなたのクローラー開発に役立つことを願っています。
コードサンプルソース: https://github.com/nmred/phpspider
以上がPHP と phpSpider: Web サイトのクローリング防止という JS の課題にどう対処するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。