質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

0回答

1149閲覧

PHP スクレイピング

ruuuuch

総合スコア6

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/05/03 09:20

編集2022/01/12 10:55

前提・実現したいこと

phpで店舗情報のスクレイピングを行なっています。
以下のHTMLにおいてclass属性の名前が被ってしまった場合はどのようにして取得したらいいでしょうか?
一行(1店舗ごと: <tr> )の中に class=”date_time” が2つ入ってしまっている状態に困っています。
定休日と営業時間を別々に取得したいです。

よろしくお願いいたします。

該当のソースコード

php

1function getData(){ 2 require_once("phpQuery-onefile.php"); 3 4 $original = "https://www.ooooooya.jp/shop/"; 5 $html = file_get_contents($original); 6 7 $doc = phpQuery::newDocument($html); 8 9 $filename = "ooooya"; 10 $filename = $filename. ".csv"; 11 12 foreach($doc["tr"] as $tmp){ 13 $storeInfo = pq($tmp); 14 15 // データを取得 16 $data_name = $storeInfo->find(".data_name")->text(); 17 $data_url = $storeInfo->find(".sitecolor")->attr("href"); 18 $address_data = $storeInfo->find(".address")->text(); 19 $data_tel = $storeInfo->find(".data_tel")->text(); 20 $data_time = $storeInfo->find(".data_time")->text(); 21 22 // 取得データを配列に格納 23 $list = array( 24 'data_name' => $data_name, 25 'data_url' => $data_url, 26 'address' => address, 27 'data_time' => data_time, 28 ...... 29 30 'pama_link' => 'oooooya-', 31 'update_date' => date("Y/m/d"), 32 ); 33 34 $all_list[] = $list; 35 } 36 37 // $all_listを基にCSVファイルを作成・書き込み 38 $fp = fopen($filename, "w"); 39 foreach ($all_list as $values) fputcsv($fp, $values); 40 fclose($fp); 41} 42 43 44// 対象html 45<tr> 46  <td class="data_name"><a class="sitecolor" href="http://asahia.net/info/">ooo店</a></td> 47  <td class="data_nearby"> 48    <p class="address">〒ooo-oooo<br />ooo番9号</p> 49    <p class="nearby"><br />(o条通り)沿い</p> 50  </td> 51  <td class="data_tel">01oo-8o-7ooo</td> 52  <td class="data_time">木曜日</td> //定休日 53  <td class="data_time">10:0018:00</td> //営業時間 54</tr> 55<tr> 56  <td class="data_name"><a class="sitecolor" href="http://kotoni.oet/info/">oo店</a></td> 57  <td class="data_nearby"> 58    <p class="address">0oo-oooo<br />3‐12<br />ビル5</p> 59    <p class="nearby">地下鉄東口 / 徒歩1<br />線 駅 / 徒歩2</p> 60  </td> 61  <td class="data_tel">011-590-0801</td> 62  <td class="data_time">日曜日</td> //定休日 63  <td class="data_time">平日 10:0018:00<br />土・祝日 10:0017:00<br /></td> //営業時間 64</tr> 65

試したこと

・配列にいれる。
・2回とる。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/05/03 09:27

ソースコードは現在の質問の「該当のソースコードの箇所、```で囲われた箇所におさめてください。
退会済みユーザー

退会済みユーザー

2018/05/03 09:36

$tt ってなに? 定義がわかるようにソースコードを開示してもらわんと。
m.ts10806

2018/05/03 09:48

classが何のクラスをさしているのか、被っているところを分かりやすく示してください。
退会済みユーザー

退会済みユーザー

2018/05/04 12:01

で $tt が $storeInfo にすれって話じゃないんじゃ
ruuuuch

2018/05/04 12:13

なるほど。コード自体をもっと開示しないといけない感じですかね?? 未熟な上、こういった質問自体初めてで、いろいろ至らずすみません! ご指摘ありがとうございます。
tonkun4os

2018/09/10 02:10

解決策あるんですがもういいですか?
takepan1973

2019/04/21 14:17

未熟なのは良いけど「date_time」と「data_time」の区別はつけて欲しい。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問