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

PHP5.3でパーサーを作る勉強をしています。

http://ja.wikipedia.org/wiki/東京太・ゆめ子

最初の文書
”東京太・ゆめ子(あずまきょうた・ゆめこ)は漫才協会、落語芸術協会所属の夫婦漫才コンビ。1976年結婚、1993年結成。2010年、文化庁芸術祭大衆芸能部門で大賞受賞。出囃子は「東京ブギウギ」。”

別の例
http://ja.wikipedia.org/wiki/カナリア_(お笑い)

最初の文書
”カナリアは、吉本興業東京本社(東京吉本、厳密には子会社のよしもとクリエイティブ・エージェンシー)所属のお笑いコンビ。メンバー共に大阪NSC21期生(東京NSC4期生扱い)。2003年結成。。”

の最初の文書(""で囲んだ部分) の部分を表示するプログラムを書いていただけると助かります。
文中のリンク・書体はそのまま活かしてください。

よろしくお願いします。

●質問者: kohhi
●カテゴリ:芸能・タレント
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● oil999
●67ポイント

パーサーというよりスクレイピングだと思います。
以下のスクリプトではどうでしょう
$url に解析したいWikiのURLを入力してください。

<?php
mb_internal_encoding('UTF-8');
mb_regex_encoding('UTF-8');
ini_set('user_agent', 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)');

$url = 'http://ja.wikipedia.org/wiki/%E6%9D%B1%E4%BA%AC%E5%A4%AA%E3%83%BB%E3%82%86%E3%82%81%E5%AD%90';

$pat = "/(<p>.*<\/p>)\n<table id=\"toc\" class=\"toc\">/msiu";

$buf = file_get_contents($url);
preg_match($pat, $buf, $arr);

echo <<< EOD
<html>
<head>
<meta charset="utf-8">
<body>
$arr[1];
</body>
</html>

EOD;
?>

kohhiさんのコメント
お返事ありがとうございました。 いつもありがとうございます。 また、よろしくお願いします。 お礼が遅くなってすいません。

2 ● Cherenkov
●67ポイント ベストアンサー

目的は概要の抽出。概要の条件は、
#mw-content-text > p かつ #mw-content-text > table[0] よりも前にある要素とする。
simple_html_dom.phpを使って作ってみました。utf-8で保存。

<?php
function pr($var) {
echo '<pre>'; print_r($var); echo '</pre>';
}

header('Content-Type:text/html; charset=UTF-8');
require_once("simple_html_dom.php");

function getWikiSummary($keyword) {
$result = '';
$url = 'http://ja.wikipedia.org/wiki/' . urlencode($keyword);
$url = preg_replace('/%28/u', '(', $url); //括弧はこの処理をしないとダメみたい。
$url = preg_replace('/%29/u', ')', $url);
$html = file_get_html($url);
$ps = $html->find('#mw-content-text > p');
for ($i = 0, $n = count($ps); $i < $n; $i++) {
$result .= $ps[$i]->innertext;
if ($ps[$i]->nextSibling()->tag === 'table') {
break;
}
}
$html->clear();
return $result;
}

$keywords = array('東京太・ゆめ子', 'カナリア_(お笑い)');

echo '<dl>';
foreach ($keywords as $keyword) {
$summary = getWikiSummary($keyword);
echo '<dt>' . $keyword . '</dt>';
echo '<dd>' . $summary . '</dd>';
}
echo '</dl>';

Cherenkovさんのコメント
東京太・ゆめ子の「出囃子は?」が無いですね…。調査します。

Cherenkovさんのコメント
修正しました。

Cherenkovさんのコメント
現コードは、各ページの構成に激しく依存しているので 必ず p + table の並びになっていないと正しく動きません。 p + div + tableのようになってたらダメかも。

Cherenkovさんのコメント
例外が見つかったらそれを概要の条件に加えてるかしてみてください。

kohhiさんのコメント
いつもありがとうございます。いろいろなパターンが出てきそうです。 また、よろしくお願いします。 お礼が遅くなってすいません。

3 ● みかん
●66ポイント

'http://ja.wikipedia.org/wiki/%E6%9D%B1%E4%BA%AC%E5%A4%AA%E3%83%BB%E3%82%86%E3%82%81%E5%AD%90’;

関連質問

●質問をもっと探す●



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