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

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

ただいまの
回答率

90.86%

  • PHP

    18170questions

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

  • スクレイピング

    225questions

PHP スクレイピング

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 105

ruuuuch

score 0

 前提・実現したいこと

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

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

 該当のソースコード

function getData(){
    require_once("phpQuery-onefile.php");

    $original = "https://www.ooooooya.jp/shop/";
    $html = file_get_contents($original);

    $doc = phpQuery::newDocument($html);

    $filename = "ooooya";
    $filename = $filename. ".csv";

    foreach($doc["tr"] as $tmp){
        $storeInfo = pq($tmp);

        // データを取得
        $data_name = $storeInfo->find(".data_name")->text();
        $data_url = $storeInfo->find(".sitecolor")->attr("href");
        $address_data = $storeInfo->find(".address")->text();
        $data_tel = $storeInfo->find(".data_tel")->text();
        $data_time = $storeInfo->find(".data_time")->text();

        // 取得データを配列に格納
        $list = array(
            'data_name' => $data_name,
            'data_url' => $data_url,
            'address' => address, 
            'data_time' => data_time, 
             ......

            'pama_link' => 'oooooya-',
            'update_date' => date("Y/m/d"),
            );

            $all_list[] = $list;
        }

        // $all_listを基にCSVファイルを作成・書き込み
        $fp = fopen($filename, "w");
        foreach ($all_list as $values) fputcsv($fp, $values);
        fclose($fp);
}


// 対象html
<tr>
  <td class="data_name"><a class="sitecolor" href="http://asahia.net/info/">ooo店</a></td>
  <td class="data_nearby">
    <p class="address">〒ooo-oooo<br />ooo番9号</p>
    <p class="nearby">分<br />(o条通り)沿い</p>
  </td>
  <td class="data_tel">01oo-8o-7ooo</td>
  <td class="data_time">木曜日</td> //定休日
  <td class="data_time">10:00~18:00</td> //営業時間
</tr>
<tr>
  <td class="data_name"><a class="sitecolor" href="http://kotoni.oet/info/">oo店</a></td>
  <td class="data_nearby">
    <p class="address">〒0oo-oooo<br />3‐12<br />ビル5階</p>
    <p class="nearby">地下鉄東口 / 徒歩1分<br />線 駅 / 徒歩2分</p>
  </td>
  <td class="data_tel">011-590-0801</td>
  <td class="data_time">日曜日</td> //定休日
  <td class="data_time">平日 10:00~18:00<br />土・祝日  10:00~17:00<br /></td> //営業時間
</tr>

 試したこと

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • mts10806

    2018/05/03 18:48

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

    キャンセル

  • asahina1979

    2018/05/04 21:01

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

    キャンセル

  • ruuuuch

    2018/05/04 21:13

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

    キャンセル

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

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

  • ただいまの回答率 90.86%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    18170questions

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

  • スクレイピング

    225questions