如何使用JAVA解析HTML页面中的值

如何使用JAVA解析HTML页面中的值,java,html,Java,Html,我需要提取值​​从HTML页面 该页面包含以下内容: 我只想从中提取值 我尝试了以下代码: import java.io.*; import java.net.*; import javax.swing.text.html.*; import javax.swing.text.html.parser.*; public class Test extends HTMLEditorKit.ParserCallback { StringBuffer txt; Reader reade

我需要提取值​​从HTML页面

该页面包含以下内容:

我只想从中提取值

我尝试了以下代码:

   import java.io.*;
import java.net.*;
import javax.swing.text.html.*;
import javax.swing.text.html.parser.*;

public class Test extends HTMLEditorKit.ParserCallback {
  StringBuffer txt;
  Reader reader;

  // empty default constructor
  public Test() {}

  // more convienient constructor
  public Test(Reader r) {
    setReader(r);
  }

  public void setReader(Reader r) { reader = r; }

  public void parse() throws IOException {
    txt = new StringBuffer();
    ParserDelegator parserDelegator = new ParserDelegator();
    parserDelegator.parse(reader, this, true);
  }

  public void handleText(char[] text, int pos) {
    txt.append(text);
  }

  public String toString() {
    return txt.toString();
  }

  public static void main (String[] argv) {
    try {
      // the HTML to convert
      URL toRead;
      if(argv.length==1)
        toRead = new URL(argv[0]);
      else
        toRead = new URL("http://test.com/values.html");

      BufferedReader in = new BufferedReader(
        new InputStreamReader(toRead.openStream()));
      Test d = new Test(in);
      d.parse();
      in.close();
      System.out.println(d.toString());
    }
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}
我得到的是这个摘录:

Measured valuestable{font-family:verdana,arial,helvetica,sans-serif;color:#000;font-size:10px;background-color:#fff;}Temperature:24.9°CRelative humidity:48.3%RHDew point:13.3°C
是否有机会只提取值​​?

25.0
51.0
14.1
谢谢大家的帮助和理解

诚挚的问候


谢谢大家的帮助。 根据建议,我使用JSoup如下:

   Document doc;
   try {

    // need http protocol
    doc = Jsoup.connect("http:/test.com/values.html").get();



    String text = doc.text();

    System.out.println("text : " + text);
            Element pending = doc.select("table td:eq(1)").get(0);
            Element nextDate = doc.select("table td:eq(1)").get(1);
            Element date = doc.select("table td:eq(1)").last();

            System.out.println(pending.text() + "\n" + nextDate.text() + "\n" + date.text());




} catch (IOException e) {
    e.printStackTrace();
}
}

结果是:

23.9°C 
52.8%RH
13.7°C
仅提取值是不可能的​​, 没有ºC和%RH

给您带来的不便,我深表歉意。

rpirez

使用Jsoup库使用java解析HTML页面,它提供了按文档、元素、标记、逐行等解析HTML页面的最佳方法

例如: Document doc=Jsoup.connect(“”.get()

或者通过ID获取元素

//如果是单个数据

Document doc = Jsoup.parse(html);

Element data1 = doc.getElementById("data1");

// If its a multiple data,
Elements inputElements = data1.getElementsByTag("input");
// Using elements do something like this to parse the data perfectly,    
for (Element inputElement : inputElements) {
    String key = inputElement.attr("name");
    String value = inputElement.attr("value");
}
如果您在使用这个罐子时有任何问题,请务必告诉我们

感谢和问候,
Harry

Google for
jericho
,这是一个解析html页面的非常好的框架,它比apache
Httpclient
的框架要好。嘿,在使用了我的jsoup思想之后,您需要的是将字符串转换为小数,因此使用以下代码获得以下结果。因为元素不知道数字

public static void main(String[] args) {
    String str="23.9°C";
    System.out.println(str.replaceAll("[^0-9.]+", " ").toString());
    str="52.8%RH";
    System.out.println(str.replaceAll("[^0-9.]+", " ").toString());
    str="13.7°C";
    System.out.println(str.replaceAll("[^0-9.]+", " ").toString());
}

23.9 
52.8 
13.7 

您可以使用JSoup,解析页面并从特定标记中提取数据。非常感谢您的回复。你能给我一些示例代码吗?谢谢你的回复,它真的很有用。我编辑我的问题,你能帮我只提取值吗?public static void main(String[]args){String str=“23.9°C”System.out.println(str.replaceAll([^0-9.]+”).toString();str=“52.8%RH”System.out.println(str.replaceAll([^0-9.]+”).toString());str=“13.7°C”System.out.println(str.replaceAll([^0-9.])+),“).toString());}我上面的代码可以用于您的转换,您需要做的是将最终挂起的.text()转换为字符串,然后使用我上面的代码,这将返回以下答案。23.9 52.8 13.7rpirez,它解决了您的问题还是您需要任何其他东西?非常感谢您的回复和帮助,先生。