• ベストアンサー

ブログのHTMLから本文を抽出したい

いつもお世話になっています。 ブログのHTMLから本文を抽出したいと思っています。 ヤプログを例にとると、ヤプログのHTMLは以下のようになっています。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> … <!-- entry --> …  <td class="entry_title">  <h3>タイトル<span class="date">2005年10月29日(土)</span></h3> … <td class="entry_text"> … <div class="entry_layer"><div style="text-align: center;"> <img src="/cafe_life/img/25/cafe67.jpg" border="0"> </div> <br> 今日はとてもいい天気だったので、<br> 渋谷に買い物に行きました。<br> … <br> 新しいiMacが欲しいなぁ~<br> <br> </div> … <!-- entry --> … </html> そこで、本文を抽出するのに、 <td class="entry_text"> から<!-- entry -->までをHTMLから抽出し、 さらにそれに対してタグを除去するようにしてブログの本文の 「今日はとてもいい天気だったので、  渋谷に買い物に行きました。  …  新しいiMacが欲しいなぁ~」 を抽出させたいと思っています。 このようにするにはプログラムをどのように作成すればよいでしょうか? よろしくお願いします。

  • shows
  • お礼率96% (48/50)
  • Java
  • 回答数4
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • jun-1
  • ベストアンサー率29% (18/61)
回答No.3

HTMLはXMLと違って必ず開始タグ+終タグの関係になっていないので、 ちょっと面倒くさいですが、本文がどこ(どのタグ)から始まり どこで終わりかが分かっていればString#indexOf、String#substringで 目的の文字列(タグつき本文)が取得できます。 次に余計なタグ(div)を削除し、改行タグ(br)を改行コード(\r\n)に 変換すれば読める文字列になるかと思うのですが。 (もしかしたら文字コードの変換が必要になるかもしれませんが) 変換はString#replaceかString#replaceAllを使ってください。jdkのバージョンによっては後者は使えませんが。

参考URL:
http://java.sun.com/j2se/1.4.2/docs/api/index.html
shows
質問者

お礼

ご回答ありがとうございます。 ご回答を参考にして頑張ってみます。

その他の回答 (3)

  • bobviv
  • ベストアンサー率50% (13/26)
回答No.4

 正規表現でパターンマッチングすれば不可能ではないでしょう。どんなコードを書けばいいかは、ご自身でもう少しお考えになりとりあえず叩き台を出して頂かないと、有益なアドバイスも出てこないのではないでしょうか?  掲示板はボタンを押しさえすれば無料でソースコードを吐き出してくれる自動販売機ではありません。  しかし、HTML文書に含まれるデータを処理するってのは、私の印象ではパターンマッチングとしてはかなり上級の課題のような気がします(要素と属性の間に改行とか入ってたらどうすんだとか、属性値が"で囲まれていない場合はどうすんだとか、欲しいテキストの一部が<b>とかで囲まれてたらどうすんだとか。。。)。 おそらく一般的・半永久的に使えるパターンを作るには、HTMLのDTDを精読する必要があるでしょう。  それに、コメント行をあてにしてマッチングするというのも何か気が進まないですねえ。他に方法は無いんでしょうか?  xsltが使えるXHTMLの場合なら少しはやる気がしますが。。。    

shows
質問者

お礼

ご回答ありがとうございます。 確かにこちらを頼りすぎて、私自身に勉強不足・努力不足のところがありました。 今後は、試行錯誤の上、どうしても分からないときのみ、 こちらを利用したいと思います。

  • jun-1
  • ベストアンサー率29% (18/61)
回答No.2

Socket or HttpConnectionでHTTP通信すればHTMLのソースは取得できます。 あとは、HTMLのタグを取り除く&改行を追加する、で できますよね? それとも文字列操作ができないんでしょうか?

shows
質問者

お礼

ご回答ありがとうございます。 指定した範囲だけのHTMLのソースを抜き出して、 それに対してタグを取り除くということはできるのでしょうか? また、どのようにプログラムを組めばいいのでしょうか? よろしくお願いします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

回答ではないのですが、 私知っているヤプログのサイトは、そのような構成になっていませんでした。 ??

shows
質問者

お礼

申し訳ありません。 私の確認不足でした。 確認したところ、はっきりとは言えないのですが、 ヤプログもリニューアル前と後のブログでは、 HTMLの構造が変わっているようです。 質問で記述したのは、私のヤプログのブログの記事のHTMLを参照して書いたのですが、 ヤプログのトップhttp://www.yaplog.jp/ で紹介しているPRIDEレフェリー島田さんのブログや、 高橋千佳子さんのブログなど比較的新しいブログのHTMLでは、 <div class="entry">からブログのエントリーの記述が始まり、 <div class="txt">からブログの本文の記述が始まり、 <!-- FeedMe -->までがブログのエントリーという記述になっていました。 ただ、私のブログや知り合いのブログなど比較的古くから始めているブログは質問のようなHTMLの構造になっていました。 もしよろしければ、上記のどちらかに対応してブログの本文を抽出する方法を教えていただけますか? よろしくお願いします。

関連するQ&A

  • ブログのHTMLからtrackback:pingの抽出(HTMLにrdf要素がないブログ)

    以前、「ブログのHTMLからtrackback:pingを抽出したい」 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1710072 の質問をしたものです。 前の質問でしたように、一般的なブログでは、trackback ping URLは、 ブログの記事のHTMLの中の、rdf:Description要素の中の、 trackback:pingのところに記述されています。 しかし、上記に当てはまらないブログもありました。 例えば、ヤプログやドリコムブログです。 これらのブログでは、HTML中でrdf:Description要素自体が記述されておらず、 以下のような形でtrackback ping URLが記述されています。 例)ヤプログ(trackback ping URLはhttp://yaplog.jp/example/tb_ping/22) <html lang="ja"> <head> <title> … <td width="5" background="/blog/template/37/img/entryl.gif">&nbsp;</td> <td> <table width="350" border="0" cellspacing="0" cellpadding="0"> <tr> <td class="entry_text"> この記事へのトラックバックURL<br /> http://yaplog.jp/example/tb_ping/22<br><br> <div class="comment_layer"> </div>  </td> </tr> </table> </td> <td width="5" background="/blog/template/37/img/entryr.gif">&nbsp;</td> </tr> <tr> … </body> </html> このようなHTMLからtrackback ping URLである、 http://yaplog.jp/example/tb_ping/22を抽出したいです。 ブログの記事のURLを入力して、 そのブログの記事のtrackback ping URLを取得するには、 どのようにプログラムを組めばいいでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • ↓を詳しくかきました。

    たびたびすいません。今回は過去記事がすべて消えてしまいました。携帯からはみれます。投稿してみると題名は掲載されますが、記事は掲載されません。たぶんHTMLをしらないうちに触っていたんだと思います。たぶん下記の人気ブログランキング参加中当たりを触ってしまいました。今までもこのバナーを使って問題はありませんでした。たぶんEnterのボタンをどこか押していたんだと思います。 どなたか詳しい方教えて下さい。長文すいません。 <br> <div align="right"><{$category_link[entry]}> <span class="etText">/</span> <a href="<{$entry_url[entry]}>"><span class="etTime"><{$entrytime[entry]}></span></a></div> <br> <div align="center"><{$image}></div> <div class="Posi"><span class="etBody"><{$thumbnail[entry]}><br>人気ブログランキング参加中 クリックお願いします。 <a href="http://blog.with2.net/link.php?490511"><img src="http://blog.with2.net/img/banner2.gif"></a> <br> </span></div> <div align="right"><span class="etCommentLink">コメント ( <{$comment_link[entry]}> )</span><span class="etText"> | </span><span class="etTBLink">Trackback ( <{$trackback_link[entry]}> )</span> </div> <div><img src="/images/clear.gif" width="15" height="15" alt="" /></div> </td> </tr> </table> </td> </tr>

  • VBA エクセルの表をHTML形式のテーブルに変換

    https://tonari-it.com/vba-html-table/ 上記のマクロではCSSが使えない簡単なテーブルタグです。 <table> <tr> <td class=“CSS1”>1</td> <td> <div class=“CSS2”> <div class=“CSS3”> <img> <span class=“CSS4” style="background-image: url(images/abc.png);"></span> </div> <div class=“CSS5”> <div class=“CSS6”>山田 太郎</div> <div class="CSS7”><span>東京</span></div> </div> </div> </td> <td class="CSS8>2000</td> <td class="CSS9”>2000</td> <td class="CSS9”>2000</td> <td class="CSS9”>6000</td> </tr> </table> というふうにやりたいのですが、どうしたら良いでしょうか?

  • HTMLとCSS

    CSSで、文字に影をつけようと思っても、プログラムを組んでもうまくいきません。他(CSSで文字に色をつける)のを組むと、上手くいきますが、影だけが失敗します。 他のCSSが動いたって事は、CSSの基本は合っているので、多分、 影のCSSタグが間違っていると思います。 使ったタグは下記で。 省略 <STYLE TYPE="text/css"> <!-- .ts1 {text-shadow:3px 3px} .ts2 {text-shadow:red 3px 3px;} .ts3 {text-shadow:red 3px 3px 2px;} --> </STYLE> </HEAD> <BODY> <SPAN CLASS="ts1">text-shadow</SPAN><BR><BR> <SPAN CLASS="ts2">text-shadow</SPAN><BR><BR> <SPAN CLASS="ts3">text-shadow</SPAN><BR><BR> </BODY> </HTML> 上記で失敗したので、このタグもつかいました td { filter:dropshadow (color=red ,offx=3 ,offy=3 ,positive=true) ; } 何処が原因でしょうか?

  • HTMLへ要素の挿入について

    HTMLを文字列に代入した後に、img要素にsrcやwidhtなどのプロパティを 追加したいのですが可能でしょうか。 もし可能でしたら方法をご教授よろしくお願いします。 例 var elem = '<div class="box"><div><span></span></div><img /></div>'; どうぞ宜しくお願いします。

  • RSSからblog(ブログ)の本文を抽出したい

    RSSからblogの本文を抽出するプログラムを 作りたいと思っています。 例えば、以下のようなRSSに対して (省略部分があります。) <?xml version="1.0" encoding="UTF-8" ?> - <rdf:RDF xmlns:rdf="http://~> + <channel rdf:about="http://~"> - <item rdf:about="http://blog.livedoor.jp/~"> <title>ショッピング</title> <link>http://blog.livedoor.jp/~</link> <description>今日はとてもいい天気だったので…</description> <dc:creator>shows</dc:creator> <dc:date>2005-09-24T22:00:21+09:00</dc:date> <dc:subject>ブログ</dc:subject> - <content:encoded>  - <![CDATA[   <a href="http://image.blog.livedoor~">   </a>今日はいい天気だったので、<br>   ショッピングに出かけました<br>   <br>     本文略   <br>   新しいibookが欲しいなぁ~<br>  ]]> </content:encoded> </item> (以降略) <content:encoded>のCDATAセクションの中の、 今日はいい天気だったので ~ 新しいibookが欲しいなぁ~ までがブログの本文なのでこれを抽出したいと思っています。 そこで、現在ではjavaを使ってDOMで抽出しようと試みているのですが、 こちらのサイト http://www.hellohiro.com/xmldom.htm のHelloWorldDOMPageList.javaを参考にしてプログラムを作ったのですが、 title,link,descriptionの抽出は出来ましたが、 ブログ本文が記述されている、 <content:encoded> or <![CDATA[ 内の要素(データ)を取得できません。 どのような方法(プログラム)をすれば取得できるようになるでしょうか? よろしくお願いします。

    • ベストアンサー
    • XML
  • HTMLのPOSTで値が正しく送信できない

    こんにちは。 以下のプログラム(正確には、PHPで書いてHTMLではき出された物のHTMLコード)を書いているのですが、うまくいかないので、質問させてください。 フォームPOSTで、データを送ろうとしています。 テーブルを作成し、今は、2行のテーブルとなっています。 1行目でPOSTしたものと、2行目でPOSTしたものをどちらも受け取りたいのですが、2行目でPOSTしたものしか、受け取れません。どこがおかしいのでしょうか? 分かる方、よろしくお願いします! 以下プログラム-------------------------- <form method="POST" action="test1.php"> <table border="1" cellpadding="1"> <tr> <td width="123"> <a href="g1_who.flv" target="_self"> <img src="g1_who.jpg" alt="" border=0 width="160" height="120" /></a><br> <p class="heading"> <div class="name"> <p align="center"><a href="./?m=pc&amp;a=page_f_home&amp;target_c_member_id=1">てすと</a><br></p> </div> <input name="movie[g1_who.flv,g1_who.jpg]" type="text" size="3" /><br><br> </td> <td width="123"> <a href="movie/bus.flv" target="_self"> <img src="bus.jpg" alt="" border=0 width="160" height="120" /></a><br> <p class="heading"> <div class="name"> <p align="center"><a href="./?m=pc&amp;a=page_f_home&amp;target_c_member_id=1">てすと</a><br></p> </div> <input name="movie[bus.flv,bus.jpg]" type="text" size="3" /><br><br> </td> </tr> <tr> <td width="123"> <a href="usagi.flv" target="_self"> <img src="usagi.jpg" alt="" border=0 width="160" height="120" /></a><br> <p class="heading"> <div class="name"> <p align="center"><a href="./?m=pc&amp;a=page_f_home&amp;target_c_member_id=4">てすと</a><br></p> </div> <input name="movie[usagi.flv,usagi.jpg]" type="text" size="3" /><br><br> </td> <td width="123"> <a href="test.flv" target="_self"> <img src="test.jpg" alt="" border=0 width="160" height="120" /></a><br> <p class="heading"> <div class="name"> <p align="center"><a href="./?m=pc&amp;a=page_f_home&amp;target_c_member_id=4">てすと</a><br></p> </div> <input name="movie[test.flv,test.jpg]" type="text" size="3" /><br><br> </td> <td width="123"> <a href="bus.flv" target="_self"> <img src="bus.jpg" alt="" border=0 width="160" height="120" /></a><br> <p class="heading"> <div class="name"> <p align="center"><a href="./?m=pc&amp;a=page_f_home&amp;target_c_member_id=4">てすと</a><br></p> </div> <input name="movie[bus.flv,bus.jpg]" type="text" size="3" /><br><br> </td> <td width="123"> <a href="g1_who.flv" target="_self"> <img src="g1_who.jpg" alt="" border=0 width="160" height="120" /></a><br> <p class="heading"> <div class="name"> <p align="center"><a href="./?m=pc&amp;a=page_f_home&amp;target_c_member_id=1">てすと</a><br></p> </div> <input name="movie[g1_who.flv,g1_who.jpg]" type="text" size="3" /><br><br> </td> </tr> </table> <br> <input type="submit" class="input_submit" value="選んだ映像を確認する" /> </form>

  • テーブルタグについて

    重ね重ね質問してごめんなさい! スタイルシートを使ってみたんですけど・・・ <HTML> <HARD> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="content-style-type" content="text/css"> <META name="robots" content="noindex,nofollow"> <TITLE>**************</TITLE> <style type="text/css"><!-- body{font-size:12px;} div{font-size:14pt;font-weight:bold;color:orange;text-indent:47em;} .moji{font-size:13px;font-weight:normal;color:black;text-indent:65em;} span{font-size:14px;color:orange;margin-left:75em;} .rire{font-size:12px;color:black} --></style> </HEAD> <BODY> <BR><BR><BR><BR> <div>***********</div> <BR> <div class="moji">***************</div> <BR><BR> <span><A HREF="mail.htm"><IMG SRC="image/******.gif" border=0></A>(←mail)</span> <BR><BR><BR><BR> <table class="rire" border align="right" border="0" cellpadding="0" cellspacing="1" bordercolor="orange"> <tbody> <tr> <td>**** <img src="image/***.gif"></td> <BR> <tr> <td align="left"> <table style=" border:1px;solid #ffa000; cellpadding: 3px;width: 320px;height: 63px ;color:black; font-size:12px;"> <tr> <td>****</td> </tr> </tbody> </table>    ・    ・    ・ テーブルタグを閉じても文字がテーブルの中に入ってしまうんです・・・。 何が間違っているのか分かりません・・・。閉じるタブは閉じてます・・・よね? 教えてください!

    • ベストアンサー
    • HTML
  • HTMLでメールフォームを作成しました。

    HTMLでメールフォームを作成しました。 <table bgcolor="#fff0f5" border="1" width="500" summary="フォーム"> <tr><td> <FORM ACTION="mailto:aaa@bbb?subject=@問合せ" METHOD="post" ENCTYPE="text/plain"> <div class="red25centerB"> <img src="ccc.png" class="middle"> お問合せ </div> <br/> <div >・お名前:<INPUT TYPE="text" NAME="氏名" VALUE=""></div> <br/> <br/> <div>・Eメールアドレス:<INPUT TYPE="text" NAME="mail" SIZE="45" VALUE=""></div>  <br/> <br/> <div>・年齢: <br/> <br/> <INPUT TYPE="radio" NAME="tosi" VALUE="10">10代 <INPUT TYPE="radio" NAME="tosi" VALUE="20">20代 <INPUT TYPE="radio" NAME="tosi" VALUE="30">30代 <INPUT TYPE="radio" NAME="tosi" VALUE="40">40代 <INPUT TYPE="radio" NAME="tosi" VALUE="50">50代 <INPUT TYPE="radio" NAME="tosi" VALUE="60">60代以上 </div> <br/> <br/> <div>・ご質問内容等をお書きください <br/> <br/> <TEXTAREA NAME="問合せ" ROWS="7" COLS="55"></TEXTAREA></div> <br/> <br/> <div><INPUT TYPE="submit" VALUE="送信"> <INPUT TYPE="reset" VALUE="書き直す"></div> </FORM>   <img src="ddd.png" class="middle">一回だけ押してください。 </td></tr> </table> 一部のPCでは、送信をおすと、 このフォームは電子メールを使用して送信されます、このフォームを送信するとアドレスが受信者に公開され、暗号化されずに送信されます。 この操作は取り消しもできます。 と表示されます。そして、OKボタンを押しても、上手く送信されません。 なお、winxpや7で発生しているようですが、メーラーはどちらもoutlookですが、送信トレイにすらメールがありません。 解決方法を教えていただければ幸いです。

  • HTMLについて

    現在HTMLを勉強しています そこで画像の配置についてわからないところがあるので教えてください 添付した画像のようにしたいのですが緑の画像がかなりしたになってしまいます どうすればいいでしょうか? コードとCSSは HTML <body> ~~~省略~~~ <div class="menu_block"> <table class="menu_left"> <tr> <td class="photo"><img src="img/siri-zu.gif" style="margin-top:80px;"></td> </tr> <tr> <td class="photo"><img src="img/sekkenn.gif" style="margin-top:20px;"></td> </tr> <tr> <td class="photo"><img src="img/oiru.gif"style="margin-top:10px;"></td> </tr> <tr> <td class="photo"><img src="img/jeru.gif"style="margin-top:10px;"></td> </tr> <tr> <td class="photo"><img src="img/set.gif"style="margin-top:10px;"></td> </tr> <tr> <td class="photo"><img src="img/mini.gif"style="margin-top:10px;"></td> </tr> </table> <img src="img/3.gif" height="300" alt="3STEP" class="menu_right"> <img src="img/rank.jpg" style="margin-top: 80px ;" class="ranking"> <img src="img/test.jpg" width="600" height="200" style="margin-left: 200px;" class="rebyu"> </div> </div> </body> CSS @charset "UTF-8"; h1 { margin: 30px 0 30px 0; padding: 0 0 0 0; line-height: 0; text-align: center; } #wrapper { width: 1050px; margin: 0 auto 0 auto; } .menu_block { overflow: hidden; zoom: 1; } .menu_left { float: left; margin-right: 20px; } .menu_right { float: left; margin-top: 80px; margin-left: 20px; } .ranking { float: left; margin-left: 20px; } .rebyu { float: left; margin-top: 10px; } です 赤の真下に緑が来るというのが理想です

    • ベストアンサー
    • HTML

専門家に質問してみよう