前提・実現したいこと
いろんなサイトの店舗情報を取得してAPIのインターフェースのサンプルを作ってます。
そこでphpQueryでスクレイピングを行っているのですがうまくいったサイトとそうでないサイトがありました。
同じように行っているのですが片方だけ失敗。
簡単な指定でも取得できないためコードの誤りと2つのサイトの違いをご教示いただきたいです。
発生している問題・エラーメッセージ
該当のソースコード
失敗するコード
PHP
1<?php 2require_once("./phpQuery-onefile.php"); 3 4const BASE_URL = "http://www.pacificgolf.co.jp/course/"; 5$doc = phpQuery::newDocumentFile(BASE_URL); 6 7foreach ($doc["#tab_01"]->find("#lookTable2") as $golf_course){ 8 $shop_name = pq($golf_course)->find("tbody")->find('.c_name')->find('a'); 9 $shop_detail = pq($golf_course)->find("#lookTable2")->find("tbody")->find('.c_name')->find('a')->attr('href'); 10 $business_hours = pq($golf_course)->find('.tel'); 11 $shop_tel = pq($golf_course)->find("#lookTable2")->find("tbody")->find('.tel'); 12 $shop_address = pq($golf_course)->find("#lookTable2")->find("tbody")->find('.address'); 13 //$address_memo = pq($shopInfo)->find('.shopListInfoWrapper')->find('.shopListInfo02')->find('.shopListInfo02Text02'); 14 15 $jsonData[] = [ 16 'name' => $shop_name, 17 'link' => $shop_detail, 18 'business_hours' => $business_hours, 19 'shop_tel' => $shop_tel, 20 'address' => $shop_address, 21 //'address_memo' => $address_memo 22 ]; 23} 24$json = json_encode($jsonData); 25 26?>
成功するコード
<?php require_once("./phpQuery-onefile.php"); const BASE_URL = "https://www.alpen-group.jp/store/sportsdepo_alpen/shop_search/"; const TOP_URL = "https://www.alpen-group.jp/store/sportsdepo_alpen/"; $doc = phpQuery::newDocumentFile(BASE_URL); foreach ($doc[".shopListSectionWrapper"]->find(".shopListBox") as $shopInfo){ $shop_name = pq($shopInfo)->find('.shopListBoxInner')->find('.shopListBoxTitleWrapper')->find('.shopListBoxTitle')->find('a'); $shop_detail = pq($shopInfo)->find('.shopListBoxInner')->find('.shopListBoxTitleWrapper')->find('.shopListBoxTitle')->find('a')->attr('href'); $shop_detail = str_replace("../", TOP_URL, $shop_detail); $business_hours = pq($shopInfo)->find('.shopListInfoWrapper')->find('.shopListInfo01')->find('dd:eq(0)'); $business_hours = rtrim($business_hours); $shop_tel = pq($shopInfo)->find('.shopListInfoWrapper')->find('.shopListInfo01')->find('dd:eq(1)'); $shop_address = pq($shopInfo)->find('.shopListInfoWrapper')->find('.shopListInfo02')->find('.shopListInfo02Text01'); $address_memo = pq($shopInfo)->find('.shopListInfoWrapper')->find('.shopListInfo02')->find('.shopListInfo02Text02'); $jsonData[] = [ 'name' => $shop_name, 'link' => $shop_detail, 'business_hours' => $business_hours, 'shop_tel' => $shop_tel, 'address' => $shop_address, 'address_memo' => $address_memo ]; } $json = json_encode($jsonData); var_dump($json); ?>
補足情報(FW/ツールのバージョンなど)
CentOS Linux release 7.4.1708 (Core)
PHP 7.1.17 (cli) (built: Apr 25 2018 08:30:10) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。