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

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

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

4116閲覧

Webスクレイピングで取得したデータを検索できるようにしたいです。

tigaimasu

総合スコア13

PHP

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2016/06/11 09:30

現在出てるエラー文です→Notice: Undefined offset: 0 in aaa.php on line 27

PHPでDOMでURLのページから要素を取り出す。
HTMLからその要素を検索し、キーワードがひっかかるものを検索という機能をつくりたいのですが、PHPの27行目にエラーがでてしまい解決できません。
改善点をぜひ、教えてください

php

1<?php 2 3$y = (isset($_GET["year"])); 4include("simple_html_dom.php"); //DOM用ライブラリ読み込み 5$url = "//ここにURL"; //データ取得対象を指定 6$dom = file_get_html($url); //指定されたURLからデータを取得しDOMツリーに 7 8$elem01 = $dom->find("#expert", 0)->find(".inner",0)->find("table",0); 9foreach($elem01->find("td") as $item){ 10 var_dump($item->innertext); 11} 12 13 14foreach($elem01->find("td") as $item){ 15 $d = $item->find("innertext"); //HTMLの当該記事の日付部分を取得 16 $tmp = array(); //記事設定用の配列の初期化 17 if(is_array($d)) $tmp["date"] = $d[0]->innertext; //日付を配列に 18 $ts->add($tmp); //記事クラス作成(リストに追加) 19} 20 21echo(json_encode($ts)); 22?> 23 24

HTML

1<!DOCTYPE html> 2<html> 3 4<head> 5<meta charset="utf-8"> 6<title></title> 7<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script> 8<script> 9$(document).ready(function(){ 10 $("#btn").click(function(){ 11 $("#output").html(""); 12 var url = "aaa.php?year=" + $("#y").val(); 13 $.ajax({url:url, dataType:"json", cache:false, success:function(j){ //通信成功時 14 $.each(j["list"], function(i){ 15 //検索文字列に一致するかをここでチェックする 16 if(this.title.indexOf($("#y").val()) != -1){ 17 var src = (this.url) ? "<div>" + this.date + ">表示</a></div><hr>" : "<div>" + this.date + "</div><hr>"; 18 $("#output").append(src); 19 } 20 }); 21 }}).fail(function(res){ //通信失敗時のデバッグ用 22 $("#output").html(res.responseText); 23 }); 24 }); 25}); 26</script> 27</head> 28 29<body> 30記事検索(キーワード指定):<input type="text" id="y"><br> 31<input type="button" value="データ取得" id="btn"> 32<hr> 33<div id="output"></div> 34</body> 35 36</html> 37

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

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

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

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

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

guest

回答1

0

ベストアンサー

php

1$d = $item->find("innertext"); 2$tmp = array(); 3if(is_array($d)) $tmp["date"] = $d[0]->innertext; 4$ts->add($tmp);

この辺全体的におかしいですね… これだと<innertext>というHTMLタグをfindしてきていることになっちゃうのでは…


【蛇足】

Simple HTML DOM Parser は古いライブラリで非常に動作が遅いです.せっかくなので速い上に外部ライブラリが不必要な方法で回答してみます.

php

1<?php 2$y = (int)filter_input(INPUT_GET, 'year'); 3$dom = new DOMDocument; 4@$dom->loadHTMLFile("ここにURL?y={$year}"); 5$xpath = new DOMXPath($dom); 6$json = []; 7foreach ($xpath->query('//*[@id="expert"]//*[@class="inner"][1]//table//td') as $i => $td) { 8 $json[$i]['date'] = $td->nodeValue; 9} 10header('Content-Type: application/json; charset=UTF-8'); 11echo json_encode($json, JSON_UNESCAPED_UNICODE);

html

1<!DOCTYPE html> 2<meta charset="utf-8"> 3<title>Example</title> 4<style> 5[v-cloak] { 6 visibility: hidden; 7} 8</style> 9 10記事検索(キーワード指定): 11<input type="text" v-model="year"><br> 12<input type="button" value="データ取得" @click="fetchData"> 13 14<hr> 15 16<div id="output" v-cloak> 17 <virtual v-for="item in list"> 18 <div v-if="item.url"><a href="{{item.url}}">{{item.date}}</a></div> 19 <div v-else>{{item.date}}</div> 20 </virtual> 21</div> 22 23<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.20/vue.min.js"></script> 24<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/0.7.2/vue-resource.min.js"></script> 25<script> 26'use strict'; 27 28Vue.http.options.emulateJSON = true; 29 30new Vue({ 31 el: '#output', 32 data: { 33 list: [], 34 }, 35 methods: { 36 fetchData: function () { 37 this.list = []; 38 this.$http.get('aaa.php', { 39 year: year, 40 }).then(function (response) { 41 this.list = response.data; 42 }, function (response) { 43 this.list = []; 44 console.error(response.data); 45 }); 46 }, 47 } 48}); 49</script>

(jQueryでやるのすごくダルそうだったのでVue.js使いました)

サイトの具体的なURLも提示されていないので動作確認できてませんが,大まかな流れはこんな感じでいいかと思います.

投稿2016/06/11 11:19

編集2016/06/11 11:40
mpyw

総合スコア5223

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問