3

Javaで少し問題があります。これを行う方法: HTML ファイルでタグ href と src を検索し、そのタグに関連付けられた URL を取得したいと考えています。

それを行う最良の方法は何ですか?

助けてくれてありがとう。よろしくお願いします。

4

7 に答える 7

2

これを 1 回限りの編集タスクとして行いたいですか、それとも体系的な (コードなどの) 実装が必要ですか? 2 番目のケースでは、Java HTML パーサーの実装を見つけて、DOM ツリーをたどります。

http://java-source.net/open-source/html-parsers

于 2009-03-23T10:11:57.860 に答える
1

これは、まさにあなたがやりたいことを実現するために使用したコードですが、最初にいくつかのヒントを紹介します。

Java Swing 環境にいる場合は、必ず javax.swing.text.html および javax.swing.text.html.parser パッケージのメソッドを使用してください。残念ながら、これらのほとんどは JEditorPane での使用を意図していますが、これらを確認することを強くお勧めします。

Java 6 API には、HTML の開始タグと終了タグを識別する HTML.Tag と呼ばれるクラスがあります。これを使用して、プログラムでたどるリンクの場所を特定できます。http://java.sun.com/javase/6/docs/api/javax/swing/text/html/HTML.Tag.html

これと非常によく似たプログラムを書いたとき、私は 3 つの主な方法を使用しました。

public void handleStartTag(HTML.Tag t, MUtableAttributeSet atts, int pos)
public void handleEndTag(HTML.Tag t, int pos)
public void handleText(char[] text, int pos)

これらのメソッドの書き方についてさらにヘルプが必要な場合は、私にメッセージを送ってください。ただし、基本的には、最初のタグと終了タグを探しており、そこから URL を識別し、次のステップに進むことができます。 、これは URL をたどっています。

URL をたどるには、JEditorPane オブジェクトを使用することをお勧めします。javax.swing.event.HyperlinkListener インターフェースは、1 つのメソッド hyperlinkUpdate(HyperlinkEvent e) のみを定義します。このメソッドに URL を渡し、JEditorPane オブジェクトで .setPage(evt.getURL()) を呼び出すことができます。これにより、ペインが新しいページで更新され、プロセスを再開できるようになります。

問題がある場合はメッセージを送ってください。この回答に投票してください。

于 2009-03-23T11:07:23.360 に答える
0

この質問を見てください:

私が使った答えはJTidyでした

于 2009-03-23T10:32:12.210 に答える
0

Rhinoを使用して、htmlファイルをロードできます。ロードされると、getElementByを使用して任意のノードに移動したり、値を取得したりできます。

于 2009-03-23T10:36:01.420 に答える
0

最も準拠していないものであっても、任意の HTML ドキュメントから DOM ツリーを構築するtagsoupを見てみましょう。

次に、XPath を使用して、返された NodeList を反復処理します。

//a

//画像

于 2009-03-23T10:49:42.043 に答える
0

ファイルがxhtml ドキュメントである場合、それは標準の xml ドキュメントであり、それを解析するための最良の方法はjdomを使用することです。JDom は非常に強力で、使いやすく、理解しやすいものです。

html ドキュメントがある場合は、 htmlparser 、特にクラス LinkTag を試すことできます

于 2009-03-23T10:27:14.627 に答える
0

私はNeko HTML Parserをこの種の作業 (スクリーン スクレイピング) にうまく使用しました。

import org.cyberneko.html.parsers.DOMParser;
org.w3c.dom.Node をインポートします。

パブリック クラス TestParser {

     public static void main(String[] argv) throws Exception {
          DOMParser パーサー = 新しい DOMParser();
          for (int i = 0; i
于 2009-03-23T11:07:48.770 に答える