ホームページ > バックエンド開発 > PHPチュートリアル > クローラーの実践練習: PHP を使用して Ctrip 旅行情報をクロールする

クローラーの実践練習: PHP を使用して Ctrip 旅行情報をクロールする

PHPz
リリース: 2023-06-13 10:28:01
オリジナル
2414 人が閲覧しました

観光の継続的な発展に伴い、観光情報は非常に豊富になってきました。誰もがより包括的かつ正確な旅行情報を入手しやすくするために、クローラーを使用して旅行 Web サイト上のデータをクロールし、分析および処理することができます。この記事では、PHP を使用して Ctrip の旅行情報をクロールする方法を紹介します。

  1. クローラーの基本

クローラーは、Web サイトにアクセスするユーザーをシミュレートし、Web サイト上のデータを取得する自動プログラムです。クローラーは通常、次のステップに分かれています。

  1. リクエストの開始: クローラー プログラムは、ターゲット Web サイトへの HTTP リクエストを開始し、ターゲット Web サイトの HTML コードを取得します。
  2. HTML の解析: 適切なパーサーを使用して HTML コードを解析し、必要なデータを取得します。一般的なパーサーには、正規表現、XPath、DOM パーサーが含まれます。
  3. データの保存: 取得したデータは、後の分析と処理のためにファイルまたはデータベースに保存します。
  4. ターゲット Web サイトの分析

クローラーを作成する前に、まずターゲット Web サイトの構造とデータを分析する必要があります。このクローラーのターゲット Web サイトは Ctrip 旅行 Web サイトです。 Web サイトの URL 構造と HTML コードを分析して、Web サイトがどのようにリクエストされ、どのように解析されるかを判断する必要があります。

2.1 URL構造分析

シートリップの旅行ウェブサイトのURL構造は比較的単純で、各旅行商品には固有のID番号が付いています。北京観光の閲覧を例に挙げると、URL は https://you.ctrip.com/sight/beijing1.html です。このうち、beijing1 は北京観光の ID 番号を表します。

2.2 HTML コード分析

Chrome ブラウザの開発者ツールを使用して Web ページの HTML コードを表示すると、ページ上の旅行情報がクラスの div にあることがわかります。 「リスト_mod2」。この div には、商品名、価格、レビューなど、各旅行商品に関する詳細情報が含まれています。クローラー プログラムでは、PHP の DOM パーサーを使用してこの情報を解析する必要があります。

  1. クローラー プログラムの作成

ターゲット Web サイトの URL 構造と HTML コードを理解したので、旅行情報を取得するクローラー プログラムを作成できます。

3.1 HTTP リクエストの開始

まず、PHP の cURL ライブラリを使用して、ターゲット Web サイトへの HTTP リクエストを開始し、ターゲット Web サイトの HTML コードを取得する必要があります。コードではID=1から順に各旅行商品の詳細情報を取得するループを使用しています。

//爬取ID号从1到n的旅游产品的详细信息
for($i=1;$i<=$n;$i++){
    $url = "https://you.ctrip.com/sight/beijing$i.html"; //目标网站URL
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $html = curl_exec($ch);
    curl_close($ch);
    }
ログイン後にコピー

3.2 HTML コードの解析

次に、PHP の DOM パーサーを使用して、ターゲット Web サイトの HTML コードを解析し、必要な旅行商品情報を取得します。コードでは、XPath 式を使用してクラス「list_mod2」の div を選択し、製品名、価格、評価などの情報を取得します。

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$list_mod2 = $xpath->query('//*[@class="list_mod2"]'); //选择class为"list_mod2"的div
foreach($list_mod2 as $mod){
    $modImg = $xpath->query('a/img/@src', $mod)->item(0)->nodeValue; //获取产品图片URL
    $modTitle = $xpath->query('div/h2/a', $mod)->item(0)->nodeValue; //获取产品名称
    $modContent = $xpath->query('div/div/div/p/@title', $mod)->item(0)->nodeValue; //获取产品简介
    $modPrice = $xpath->query('div/div/span/em', $mod)->item(0)->nodeValue; //获取产品价格
    $modComment = $xpath->query('div/div/div/div/span[1]', $mod)->item(0)->nodeValue; //获取产品评价分数
    $modCommentNum = $xpath->query('div/div/div/div/span[2]', $mod)->item(0)->nodeValue; //获取产品评价人数
}
ログイン後にコピー

3.3 データの保存

最後に、取得した観光商品情報をデータベースに保存します。コードでは、PHP の PDO 拡張機能を使用してデータベースに接続し、取得した製品情報を「product_info」という名前のデータベース テーブルに挿入します。

//连接数据库
$dsn = 'mysql:host=localhost;port=3306;dbname=test;charset=utf8';
$username = 'root';
$password = '123456';
$options = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$dbh = new PDO($dsn, $username, $password, $options);

//将获取到的产品信息插入到数据库
$stmt = $dbh->prepare("INSERT INTO product_info(img_url, title, content, price, comment_score, comment_num) VALUES(?, ?, ?, ?, ?, ?)");
$stmt->bindParam(1, $modImg);
$stmt->bindParam(2, $modTitle);
$stmt->bindParam(3, $modContent);
$stmt->bindParam(4, $modPrice);
$stmt->bindParam(5, $modComment);
$stmt->bindParam(6, $modCommentNum);
$stmt->execute();
ログイン後にコピー
  1. 概要

PHP を使用してクローラー プログラムを作成すると、Ctrip 旅行 Web サイトから旅行商品情報を簡単に取得し、データベースに保存できます。実際の開発では、マルチスレッド、IP プロキシなどのテクノロジーを使用して、クローラー プログラムの効率と安定性を向上させることもできます。ただし、クローラー プログラムを使用する場合は、侵害や悪用を避けるために、ターゲット Web サイトの著作権およびプライバシー ポリシーを尊重する必要があることに注意してください。

以上がクローラーの実践練習: PHP を使用して Ctrip 旅行情報をクロールするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート