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

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

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

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

Q&A

解決済

1回答

4326閲覧

PHPで、HTML内の特定の文字列を含む文章を得る方法(X-path利用でしょうか)

cutter

総合スコア140

PHP

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

0グッド

0クリップ

投稿2016/08/28 20:48

編集2016/08/28 21:33

JSでは容易だと思うのですが、PHPにて、特定の日本語文字列を含む文章のX-pathを取得するにはどのようにしたら宜しいのでしょうか。

例えば、「本州の南海上を北東に」というワードを含む文章が、hbody という一意のクラスを持つタグの中にあるので、simple dom phpで.hbodyを狙えば文章がまるまる取得出来ます。
http://news.yahoo.co.jp/pickup/6212572

https://teratail.com/questions/18940
この質問と似ていたので、「xpath テキスト」で色々調べて出てきたものを試しましたが、何も出力されないのですが使い方が違いますでしょうか。
(配列で帰ってくるのかわからなかったのでechoとvar_dump両方しています。)

php

1$html = file_get_contents('http://news.yahoo.co.jp/pickup/6212572'); 2$document = new DOMDocument(); 3@$document->loadHTML($html); 4$path = new DOMXPath($document); 5 6// 要素の文字列が"プログラミング"である 7echo $node_list = $path->query('//*[.="進んだ"]'); 8var_dump($node_list); 9 10// 要素の文字列に"プログラミング"が含まれている 11echo $node_list = $path->query('//*(./text(), "進んだ")'); 12var_dump($node_list); 13//その他 14echo $node_list = $path->query('//p[contains(text(), "進んだ")]'); 15var_dump($node_list); 16echo $node_list = $path->query('//p[contains(text(), "進んだ")]') # 部分一致 17var_dump($node_list); 18echo $node_list = $path->query('//p[contains(., "進んだ")]') # 部分一致 19var_dump($node_list);

simple_html_dom.phpを普段使用しているのですが、特定のクラスやID,スタイル要素を持つタグを取得は出来ますが、特定の「キーワード」を含む文章を包むタグ(一意の場所指定で)取得はPHPで出来るのでしょうか。

(PhantomJSがインストール出来ない一般的な共用サーバーになります。)

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

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

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

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

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

taro_nii_chan

2016/08/28 21:43

ここでのお約束がどうなっているのか分からないのでもしかしたら問題ないのかもしれませんが、質問がどんどん変わっていくとお答えしようと調べてるこちらとして少々混乱します。出来れば指摘無く質問を修正するよりは追加を使っていただけると個人的には助かります。
cutter

2016/08/28 21:49

失礼しました、追加という機能は初めて知りました。次回よりそのようにさせて頂きます。
guest

回答1

0

ベストアンサー

php

1<?php 2 require_once 'simple_html_dom.php'; 3 $html = file_get_contents('http://news.yahoo.co.jp/pickup/6212572'); 4 $dom = new DOMDocument('1.0', 'UTF-8'); 5 $html = mb_convert_encoding($html, "HTML-ENTITIES", 'auto'); 6 @$dom->loadHTML($html); 7 $xpath = new DOMXPath($dom); 8 $xpath->registerNamespace("php", "http://php.net/xpath"); 9 $xpath->registerPHPFunctions(); 10 11 $nodes = $xpath->query("//*[text()[contains(., '本州の南海上を北東に')]]"); 12 $nodeValue =$nodes->item(0)->nodeValue; 13 var_dump($nodes); 14 var_dump($nodeValue); 15?>

こんなんでいかがでしょうか?

投稿2016/08/28 22:57

taro_nii_chan

総合スコア207

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

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

cutter

2016/08/29 07:51

使えました、ありがとう御座います!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問