ホームページ  >  記事  >  バックエンド開発  >  PHP と phpSpider: Web サイトのクローリング防止という JS の課題にどう対処するか?

PHP と phpSpider: Web サイトのクローリング防止という JS の課題にどう対処するか?

WBOY
WBOYオリジナル
2023-07-21 14:13:101510ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。