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

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

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

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

PHP

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

Q&A

解決済

1回答

714閲覧

PHPでスクレイピング、Qiitaのトレンド記事を取得したい

radioradioradio

総合スコア17

スクレイピング

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

PHP

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

0グッド

1クリップ

投稿2019/08/20 20:17

実現したいこと

タイトルの通りです。

"https://qiita.com"から、1日のトレンド記事のタイトルとリンクを取得したいです。
(以下の画像の部分)

イメージ説明

状況

・PHP 7.3.1
・simplehtmldom_1_9のsimple_html_dom.phpを読み込んでいる
・ディレクトリ下にindex.phpとsimple_html_dom.phpがある
・ターミナルにて"php index.php"と打って、ファイルを実行
・別のセレクタ(titleなど)は取得できたため、読み込み等のミスではなく、セレクタがうまく取得できていないのだと考えています。

初歩的な問題かと思いますが、時間がかかってしまいお助け願いたい次第です。
よろしくお願いいたします。

php

1//index.phpの中身です 2 3<?php 4 5require_once 'simple_html_dom.php'; 6 7$page = file_get_html('https://qiita.com/'); 8 9//以下に問題があるはず 10$elements = $page->find('.tr-Item_title a'); 11 12foreach ($elements as $ele) 13{ 14 echo $ele->plaintext, PHP_EOL; 15 echo $ele->href, PHP_EOL; 16} 17 18 19 20

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

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

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

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

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

guest

回答1

0

ベストアンサー

qiita.comのHTMLソースを見るとわかりますが、class=tr-Item_titleの要素はHTML中にはなく、JavaScriptでレンダリングされているようです。だから、プログラムのバグというより、この方法では原理的に取り出せないと思います。
以下のようにカスタムデータ属性からJSON形式でDOMを取り出すことはできるようです。

PHP

1// 省略 2$elements = $page->find('div[data-hyperapp-app=Trend]'); 3$dom = json_decode(html_entity_decode($elements[0]->attr['data-hyperapp-props'], ENT_QUOTES)); 4var_dump($dom);

投稿2019/08/20 22:09

ockeghem

総合スコア11701

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問