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

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

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

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

520閲覧

phpQuery html()の使い方、合ってますか?

llllumllll

総合スコア11

PHP

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/09/24 08:43

編集2018/09/24 09:14

phpQueryを使って、スクレイピングをしようとしています。
text()で値をとることはできたのですが、
html()でタグをとることができません。
何故でしょうか。初心者の質問でお手数をおかけします。

php

1require_once('./phpQuery-onefile.php'); 2 3//urlはPOSTで取得できています。 4$fgc = file_get_contents('https://qiita.com/zaburo/items/465ca691aebad2b5691e'); 5$dom = phpQuery::newDocument($fgc); 6$title = $dom['title']->text(); //←こちらは値が取れて 7$kiji = $dom['.it-MdContent']->html(); //←こちらはエラーとなります 8 9$rs = array( 10 'title' => $title, 11 'kiji' => $kiji 12); 13//json を出力 14 header("Content-Type:application/json; charset=utf-8"); 15 echo json_encode($rs);

▼html()のエラーの内容
SyntaxError: JSON Parse error: Unrecognized token '<'

//▼追記しました。

html

1<table> 2 <tr> 3 <td>TITLE</td><td class="title"></td> 4 </tr> 5 <tr> 6 <td>kiji</td><td class="kiji"></td> 7 </tr> 8</table> 9<script> 10$(function(){ 11 function getAllData(postData){ 12 $.ajax({ 13 type : 'post', 14 url : 'request.php', 15 data : postData, 16 dataType : 'json', 17 success : function(data){ 18 19 $('.title').text(data.title); 20 $('.kiji').html(data.kiji); 21 22 }, 23 error : function(XMLHttpRequest,textStatus,errorThrown){ 24 console.log('読み込み失敗'+ errorThrown); 25 } 26 }); 27 } 28}); 29</script>

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

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

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

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

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

m.ts10806

2018/09/24 08:46

実際取得しようとしているhtmlを提示されたほうが良いかもしれません。コードではなくデータが正しくないこともあります。
m.ts10806

2018/09/24 08:46

JSON Parse error なのでデータ構造が正しくなければ容赦なくエラーになります。
m.ts10806

2018/09/24 09:15

#kijiからit-MdContentにかわっていますが、これは?
m.ts10806

2018/09/24 09:16

元の#kijiであれば.kijiにかえれば行く可能性はありますが(でもクラス指定なので実際は配列かもしれないのでループさせたほうがいいかもしれませんが)
llllumllll

2018/09/24 09:17

先ほどは仮で入力していたものでしたので、、すみません。
m.ts10806

2018/09/24 09:19

html内にit-MdContentというclassが指定されているDOMがありませんが、このit-MdContentは何でしょうか?$dom['.it-MdContent']の結果をvar_dump()して内容確認されたほうがいいかもしれません。おそらくnullではないかと。
llllumllll

2018/09/24 09:25

ありがとうございます。どこに書いたらいいかわからないので、調べます。
m.ts10806

2018/09/24 09:29

えーと・・・私が確認していることと質問者さんの返答がかみ合っていないような・・・。
llllumllll

2018/09/24 09:30 編集

.it-MdContentというclassは「以前は、PHP Simple HTML DOM Parserってのを使っていましたが、」の近くのsectionにあるので指定しているつもりでした。 まだvar_dumpの使い方わかってないので調べてます。。
m.ts10806

2018/09/24 09:33

qiitaの記事を読み込むURLに指定しながらどこから引っ張ってきたかわからないHTMLがコード追加されたので、どのように解釈していいのか困っています。var_dump()については「PHP デバッグ」で検索されたほうが良いですね。確認してもらいたいのは「変数が想定通りの情報を持っているか」なので。
llllumllll

2018/09/24 09:40

説明が不足しており、申し訳ありません。。htmlファイルの方でphpにURLをPOSTして(今は強制的にqiitaをセットしています)、取れたデータをhtmlファイルのtableに吐き出すという事をしたいです。
llllumllll

2018/09/24 09:50

var_dump($dom['.it-MdContent']);という記述をecho json_encode($rs);の前の行に追記したら、「SyntaxError: JSON Parse error: Unexpected identifier "object"」というエラーメッセージになりました。
m.ts10806

2018/09/24 10:27

なるほど。AjaxでPHPを実行しているということですね。そのあたりの解説を提示HTMLの前あたりに入れておいていただけますか?このコメント欄はデフォルト非表示で質問だけ見た人にはどのような関連があるか伝わりませんので。
m.ts10806

2018/09/24 10:29

またこれまで試していただいた感じだとあくまで「Ajaxで実行した結果のレスポンスのエラー」ですよね。そのあたりも書いておいていただければと思います。json_encode()でJSON文字列を返そうとしているが正しくJSONに変換できていないからだと思います。PHPだけで正しく実行できているか確認されたほうが良いかもしれませんね。特に何かPHPへPOSTしているわけでもなさそうですし。
m.ts10806

2018/09/24 10:52

ちょっと確認してみたんですが、実際のURLはQiitaの記事なんですか?もしQiitaの記事であればSSL環境下でないと情報は得られないように思います。やはり、実際のURLか、その取得するページのhtml(のミニマム版)を提示されたほうが良いかと思います。聞きたいことは「html()の使い方」であればまた別ですが・・。
m.ts10806

2018/09/24 10:54

ちなみに適当なhtmlを作って存在するclassを指定したうえでhtml()を実行した場合、意図通りのデータを取得できました。存在しないclass名やID名を指定されているのではないでしょうか。
llllumllll

2018/09/24 11:12

ありがとうございます。PHPだけで正しく実行できているかどうか確認するため、echo json_encode($rs);をコメントアウトし、echo $kijiと記述しました。qiitaの記事を取得できました。実際のURLは都合上公開できないのですが、当方PCで実際のURLを試した所、文字化けを起こしていました。
m.ts10806

2018/09/24 11:19

どのような表示になっているかわかりませんが、JSONが取得できているのであれば文字化けではなくエンコードがかかった状態かと思います。PHPであればjson_decode()をかけると良いですよ。
guest

回答1

0

ベストアンサー

「JavaScriptで出ているエラー」で、URLより正しく情報が取得できているのであれば、
PHPからレスポンスを返す時の問題かと思います。
header()の前にはいかなる出力もあってはいけません。
もしデバッグ用に何か入れているのであればその出力を込みでheader()でtype:jsonでしているためエラーになっているように思います。
提示のエラーは常にJSONとして正しい形式ではないことを指しています。
あくまでjson_encode()の情報のみ出力するようにしてみてください。

<?phpの前にスペースがあったりしませんか?それも「出力」になるので含まないように調整してみてください。

投稿2018/09/24 11:24

m.ts10806

総合スコア80765

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

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

llllumllll

2018/09/25 13:05

回答いただきましてありがとうございます。解決しました。 仰る通り、PHPからレスポンスを返す時の問題のようです。 PHPでだけで正しく実行できているかどうか確認した際、文字化けしていた事から、 取得した値のエンコードの仕方を探りました。 当方が希望するURLの指定先は、Shift-JISで作ってたるページの為なのか、 一度$kijiにスクレイピングした内容を入れた後、 $kiji = mb_convert_encoding($kiji, "UTF-8", "ASCII,JIS,UTF-8,EUC-JP,SJIS-WIN"); とした所、うまくいきました。 当方の拙い説明から、内容を汲み取っていただき、アドバイスいただきました事、本当にありがとうございました。
m.ts10806

2018/09/25 13:17 編集

なるほど。確かに取得元と文字コードが違えば文字化けは起こりそうですね。 次からは環境要件として質問に追記いただいたほうが解決が早そうです。 何はともあれ解決できたようで何よりです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問