2

私はJavaを使用してWebページからタイトルテキストを取得しています。

次のようにタグ名を使用してWebページから画像を取得しました。

    int i=1; 
InputStream in=new URL("www.yahoo.com").openStream();
org.w3c.dom.Document doc= new Tidy().parseDOM(in, null);   
    NodeList img=doc.getElementsByTagName("img");
ArrayList<String> list=new ArrayList<String>();                   
    list.add(img.item(i).getAttributes().getNamedItem("src").getNodeValue());

動作していますが、上記と同じコードを使用してWebページ(www.yahoo.com)からタイトルタグを取得したいと思います。getElementsByTagName( "title");について説明しました。しかし、それは機能していません。上記のようにjtidyパーサーを使用してそれを行う方法を教えてください。

4

4 に答える 4

2

NodeListインデックスが0から始まることに注意してください(「inti = 1;」を参照)http://download.oracle.com/javase/1.4.2/docs/api/org/w3c/dom/NodeList.html

また、属性(つまり「src」)の「getNodeValue()」はできますが、要素の「getNodeValue()」はできませんhttp://download.oracle.com/javase/1.5.0/docs/api/org/w3c/dom/ Node.html。この場合、「title」タグに子要素があるとは思わないため、「getTextContent()」を使用できます。それで:

String titleText = doc.getElementsByTagName("title").item(0).getTextContent(); 

または:

String titleText = doc.getElementsByTagName("title").item(0).getFirstChild().getNodeValue(); 
于 2011-05-07T10:44:58.760 に答える
1

XPathを使用して、HTMLページのタイトルを簡単に取得できます。

/html/head/title/text()

これはDom4Jで簡単に実現できますが、JTidyでもそう思います。

于 2011-05-07T08:07:29.633 に答える
0

タイトルを取得するために実際に使用しようとしているコードを投稿しない限り、Weeはわかりませんが、これは明らかに機能しません。

    list.add(img.item(i).getAttributes().getNamedItem("src").getNodeValue());

要素に属性titleがないためです。src

于 2011-05-07T06:39:43.330 に答える
0

これを試して、

InputStream response = null;
    try {
        String url = "http://example.com/"; // specify the URL
        response = new URL(url).openStream();


        Scanner scanner = new Scanner(response);
        String responseBody = scanner.useDelimiter("\\A").next();
        System.out.println(responseBody.substring(responseBody.indexOf("<title>") + 7, responseBody.indexOf("</title>"))); // it fetches the text inside the title tag

    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        try {
            response.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
于 2019-04-30T03:40:11.940 に答える