#はじめに
あるサイトのスクレイピングを行うにあたって直面している問題です。
#概要
上述のサイトのA画面をスクレイピングするために、A画面をリクエストします。しかしそのサイトの仕様上、一旦B画面に遷移して内容を確認しなければ、A画面にアクセスすることができません。確認(具体的には画面内のリンクを踏む)した後はセッションIDを通じて、同一ブラウザであることが認識され、その情報が失われない限りは再度B画面に飛ぶことはありません。
※A画面はあくまで例で、サイト内の任意の画面にアクセスする前に、B画面での確認が必要です
#実装と問題
実装方針として、
①任意のURLでアクセスしB画面で確認するためのURLを取得し、それをリクエストし (curl関数)
②スクレピングしたいURLの中身を取得する (loadHTML関数)
という手順を踏もうとしていますが、うまくいきません
該当コードは以下です
hoge.php
1 public function scrapeTest() { 2 3 session_start(); 4 5 $dom = new \DOMDocument; 6 $testExampleURL = 'https://example.com'; 7 @$dom->loadHTML(mb_convert_encoding(file_get_contents($testExampleURL), 'HTML-ENTITIES', 'UTF-8')); 8 $xpath = new \DOMXPath($dom); 9 $query = $xpath->query('//center/div')->item(0); 10 //B画面内の確認リンクを抽出 11 $url = $query->childNodes->item(0)->attributes->item(0)->textContent; 12 // ①リクエスト 13 $ch = curl_init(); 14 curl_setopt($ch, CURLOPT_URL, $url); 15 $exec = curl_exec($ch); 16 17 // ②スクレイピングしたいURLの中身を取得する 18 $exampleURL = 'https://example.com/example'; 19 @$dom->loadHTML(mb_convert_encoding(file_get_contents($exampleURL), 'HTML-ENTITIES', 'UTF-8')); 20 var_dump($dom->documentElement);
こちらの実装では、②のURLの中身(HTML)を取得時、B画面を取得してしまいます。
原因として①と②のリクエストが同一のセッションIDを持ってないために起こっていると思いますが、ここからの実装について調べてもよくわかりませんでした。
何かアドバイスしていただける方いませんでしょうか?
どうぞよろしくお願いしますm(_ _)m
回答2件
あなたの回答
tips
プレビュー