3

複数の Web ソースから情報を集約する単純な J2SE アプリケーションを作成する予定です。

最も難しい部分は、RSS や Atom フィードとして利用できない場合、Web ページから意味のある情報を抽出することだと思います。たとえば、stackoverflow から質問のリストを抽出したい場合がありますが、その巨大なタグ クラウドやナビゲーション バーは絶対に必要ありません。

どのようなテクニック/ライブラリをアドバイスしますか?

アップデート/備考

  • 約 5MB の HTML を 10 分以内に解析できる限り、速度は問題ではありません。
  • とてもシンプルなはずです。
4

10 に答える 10

3

HTMLParser(http://htmlparser.sourceforge.net/)をURL#getInputStream()と組み合わせて使用​​して、インターネットでホストされているHTMLページのコンテンツを解析できます。

于 2008-09-16T11:57:03.713 に答える
2

httpunitがどのようにそれを行うかを見ることができます。彼らはいくつかのまともなhtmlパーサーを使用しています。1つはnekohtmlです。データを取得する限り、jdk(httpurlconnection)に組み込まれているものを使用するか、apacheの

http://hc.apache.org/httpclient-3.x/

于 2008-09-16T11:54:49.647 に答える
2

構造的または意味的なマークアップを利用したい場合は、HTML を XML に変換し、XQuery を使用して標準形式で情報を抽出することを検討してください。以下に抜粋した典型的なコードについては、この IBM developerWorks の記事を参照してください (HTML を出力していますが、もちろん必須ではありません)。

<table>
{
  for $d in //td[contains(a/small/text(), "New York, NY")]
  for $row in $d/parent::tr/parent::table/tr
  where contains($d/a/small/text()[1], "New York")
  return <tr><td>{data($row/td[1])}</td> 
           <td>{data($row/td[2])}</td>              
           <td>{$row/td[3]//img}</td> </tr>
}
</table>
于 2008-09-16T12:25:35.173 に答える
0

昔ながらの方法でそれを行いたい場合は、ソケットを使用してWebサーバーのポートに接続してから、次のデータを送信する必要があります。

GET /file.html HTTP/1.0
Host: site.com
<ENTER>
<ENTER>

次に、を使用しSocket#getInputStream、次にBufferedReaderを使用してデータを読み取り、好きなものを使用してデータを解析します。

于 2008-09-16T12:06:24.160 に答える
0

つまり、ページ全体を解析して必要なものを選択するか(速度を上げるために、SAXParserを確認することをお勧めします)、すべてのHTMLをトリミングする正規表現を介してHTMLを実行します...すべてをDOMに変換することもできます。しかし、それはあなたがまともなスループットを持っているために撮影している場合は特に高価になるでしょう。

于 2008-09-16T11:51:56.363 に答える
0

スクレイピングをスクリーニングしたいようです。ソースサイトごとにアダプタ/プラグインを介して(各サイトの形式が異なるため)、htmlソースを解析してテキストを抽出できるフレームワークを作成することをお勧めします。JavaのioAPIを使用してURLに接続し、InputStreamsを介してデータをストリーミングする可能性があります。

于 2008-09-16T11:52:13.943 に答える
0

nekohtmlを使用して HTML ドキュメントを解析できます。DOM ドキュメントを取得します。XPATH を使用して、必要なデータを取得できます。

于 2008-09-16T12:31:41.790 に答える
0

これをチェックしてください http://www.alchemyapi.com/api/demo.html

彼らはかなり良い結果を返し、ほとんどのプラットフォーム用の SDK を持っています。テキスト抽出だけでなく、キーワード分析なども行っています。

于 2011-01-30T07:41:28.527 に答える
0

「Web ソース」が (RSS のような構造化された XML 形式ではなく) HTML を使用する通常の Web サイトである場合は、HTMLUnitを参照することをお勧めします。

このライブラリは、テストを目的としていますが、実際には汎用の「Java ブラウザ」です。Javascript をサポートするために、Apache httpclient、Nekohtml パーサー、Rhino 上に構築されています。Web ページに非常に優れた API を提供し、Web サイトを簡単にトラバースできるようにします。

于 2008-09-16T13:05:42.957 に答える
0

RSS/Atom フィードを利用することを検討しましたか? 通常は消費可能な形式でコンテンツを利用できるのに、なぜコンテンツをスクレイピングするのでしょうか? 考えられるほとんどすべての言語で RSS を利用できるライブラリがあり、コンテンツをスクレイピングしようとするよりも、ページのマークアップへの依存度がはるかに低くなります。

絶対にコンテンツをスクレイピングしなければならない場合は、マークアップでマイクロフォーマットを探してください。ほとんどのブログ (特に WordPress ベースのブログ) にはデフォルトでこれがあります。また、Web ページからマイクロフォーマットを見つけて抽出するために使用できるライブラリーとパーサーもあります。

最後に、 Yahoo Pipesなどの集約サービス/アプリケーションを使用すると、車輪を再発明することなく、この作業を実行できる場合があります。

于 2008-09-16T13:12:29.693 に答える