実現したいこと
JAVAを使いURLからhtmlを読み込みたいです。
説明
以下のソースコードを実行したところ、簡単なサイトのhtmlは読み込めるのですが、ヤフーなどの複雑なサイトのhtmlを正確に読み取ることができません。
正確に読み取れないとは以下のソースコードならば最後の行の「<meta property="og:title" content="Yahoo! JAPAN"><meta property="og:type" content="article">」
この部分が読み込めてなかったりします。
<html lang="ja"> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <meta http-equiv="content-style-type" content="text/css"> <meta http-equiv="content-script-type" content="text/javascript"> <meta name="description" content="日本最大級のポータルサイト。検索、オークション、ニュース、天気、スポーツ、メール、ショッピングなど多数のサービスを展開。あなたの生活をより豊かにする「課題解決エンジン」を目指していきます。"> <meta name="robots" content="noodp"> <meta name="google-site-verification" content="fsLMOiigp5fIpCDMEVodQnQC7jIY1K3UXW5QkQcBmVs"> <link rel="alternate" href="android-app://jp.co.yahoo.android.yjtop/yahoojapan/home/top"> <link rel="alternate" media="only screen and (max-width: 640px)" href="https://m.yahoo.co.jp/"> <link rel="canonical" href="https://www.yahoo.co.jp/" /> <meta property="og:title" content="Yahoo! JAPAN"><meta property="og:type" content="article">
以下はURLからソースコードを習得するプログラムです
import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; public class Hero { public static void main(final String[] args){ URL url = null; InputStreamReader isr = null; try { url = new URL("[リンク内容](https://www.yahoo.co.jp/)"); // InputStream(バイトストリーム)のままでもHTMLは取得できるが文字化けする InputStream is = url.openStream(); // InputStreamをUTF8のInputStreamReader(文字ストリーム)に変換する isr = new InputStreamReader(is,"UTF-8"); // 一文字毎に読み込む while(true) { int i = isr.read(); if (i == -1) { break; } System.out.print((char)i); } }catch (Exception e) { System.out.println(e.getMessage()); }finally { try { isr.close(); }catch (Exception e) { System.out.println(e.getMessage()); } } }
質問
- なぜ正確にHTMLを正確に読み込めないのか?
- どのようにすれば読み込めるようになるのか?
Markdownのコードブロックを使ってください。 https://teratail.com/help/question-tips#questionTips3-5-1
また「正確に読み取ることができない」というのは具体的にどういう意味ですか?現状の具体的な問題点を質問に書き足してください。
修正させていただきます。分かりにくい質問をしてしまい申し訳ないです。
「できていないこと」はもちろん明確にしていただいているので分かりますが「できていること・起きていること」を提示してください。問題の切り分けをしましょう。デバッグもしてください。
「読み込めない」とは「途中で例外が出る」のか「処理が最後まで続くか出力されない行がある」のかどちらでしょうか?また、提示されたHTMLの例からは「最後の行が読み取れない」のか「実際のyahooのHTMLでその行が読み取れない」のかどちらでしょうか?
「処理が最後まで続くか出力されない行がある」、「実際のyahooのHTMLでその行が読み取れない」ということです!説明不足で申し訳ないです。
回答3件
あなたの回答
tips
プレビュー