人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHP(5.3)で
Wikipediaの「漫才師一覧」から
simple_html_dom.php を使用して
Wikipediaと、ほぼ同じように、漫才師一覧を表示させるプログラムを書こうとしています。

http://ja.wikipedia.org/wiki/漫才師一覧

1.$keyword (漫才師一覧)をエンコードし

2.<li>タグ の中の
<a>タグのURLとinnertextを抽出して一覧表示させたいです。

例えば、
アームストロング(栗山直人、安村昇剛)
の「アームストロング」の文字列の部分はリンクがある。
栗山直人、安村昇剛にはリンクがない。

次の行
相方不在(さな、吉野ももみ)
は、「相方不在」「さな」「吉野ももみ」
にそれぞれ別のリンクがある。

*要は、http://ja.wikipedia.org/wiki/漫才師一覧
の「あ」行から「わ」行までと、同じように表示しようとしています。

参考までに、僕が下記のプログラム書いてみましたが、
エラーになります。
下記コードを基に書き直していただけると助かります。

http://test01.1811way.com/archives/10
よろしくお願いします。

●質問者: kohhi
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● みかん
●0ポイント

find('a');//foreach($items as $item){ echo $item->innertext .'
';


2 ● oil999
●100ポイント

ご質問のスクリプトの "$url = ..." の行末のセミコロンが抜けているためにエラーだったのだと思います。
さらに下記のように改良してみました。

<?php
require_once("simple_html_dom.php");
$keyword = '漫才師一覧';
$url = 'http://ja.wikipedia.org/wiki/' . urlencode($keyword);
$html = file_get_html($url);
$items = $html->find('li');
foreach($items as $item) {
 if (!isset($item->id) && preg_match('/^<a href\=\"\/wiki\//ui', $item->innertext)) {
 echo $item->innertext .'<br />';
 }
}
?>

kohhiさんのコメント
早速お返事ありがとうございました。

3 ● KeyKey
●20ポイント

リンクのある漫才師の一覧をリンク付きで表示したいということでしょうか?
できるだけ漫才師の部分だけを抽出するようにしたつもりですが、以下のものでいかがでしょうか。

<?php
require_once("simple_html_dom.php");
$keyword = '漫才師一覧';
$url = 'http://ja.wikipedia.org/wiki/' . urlencode($keyword);
$html = file_get_html($url);

foreach ($html->find('div#mw-content-text ul li a') as $item) {
echo '<a href="' . $item->href . '" title="' . $item->title . '">' . $item->innertext . '</a>';
echo "<br />\n";
}
?>

kohhiさんのコメント
早速お返事ありがとうございました。

4 ● Cherenkov
●200ポイント ベストアンサー

回答2をforkして。utf-8で保存してください。

<?php
header('Content-Type:text/html; charset=UTF-8');
echo '<style>a.new { color: #BA0000; }</style>';

require_once("simple_html_dom.php");
$keyword = '漫才師一覧';
$url = 'http://ja.wikipedia.org/wiki/' . urlencode($keyword);
$html = file_get_html($url);
$items = $html->find('#mw-content-text li');
foreach ($items as $item) {
if (preg_match('/href\=\"\/wiki\/|class=\"new\"/ui', $item->innertext)) {
$link = preg_replace('/href="/ui', 'href="http://ja.wikipedia.org', $item->innertext);
echo $link .'<br />';
}
}

kohhiさんのコメント
すいません。 1."test26.php"というファイル名でlocalな環境で保存し http://localhost/parser/test26.php で、表示されますが、 リンクをクリックすると、 「Web ページが見つかりません」となります。 (http://localhost/wiki/encodeされた文字) だからだと思います。 2.サーバにアップすると 何も表示されません。 http://1811way.com/work008/test26.php お手数おかけしてすいません。 よろしくお願いします。

Cherenkovさんのコメント
require_once("./simplehtmldom/simple_html_dom.php"); のパスを環境に合わせて下さい。多分 require_once("simple_html_dom.php");にすればいいかと。 元々のリンク先が相対パスになっているから「Web ページが見つかりません」になるのでしょう。置換するコードを書いてみます。

Cherenkovさんのコメント
回答を修正しました。ご確認下さい。

kohhiさんのコメント
早速お返事ありがとうございました。 できました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ