用JAVA解析网站HTML

用JAVA解析网站HTML,java,html,scrape,Java,Html,Scrape,我想解析一个简单的网站,并从该网站中获取信息 我曾经用DocumentBuilderFactory解析XML文件,我尝试对html文件做同样的事情,但它总是进入无限循环 URL url = new URL("http://www.deneme.com"); URLConnection uc = url.openConnection(); InputStreamReader input = new InputStreamReader(uc.getInputStream()

我想解析一个简单的网站,并从该网站中获取信息

我曾经用DocumentBuilderFactory解析XML文件,我尝试对html文件做同样的事情,但它总是进入无限循环

    URL url = new URL("http://www.deneme.com");
    URLConnection uc = url.openConnection();

    InputStreamReader input = new InputStreamReader(uc.getInputStream());
    BufferedReader in = new BufferedReader(input);
    String inputLine;

     FileWriter outFile = new FileWriter("orhancan");
     PrintWriter out = new PrintWriter(outFile);

    while ((inputLine = in.readLine()) != null) {
        out.println(inputLine);
    }

    in.close();
    out.close();

    File fXmlFile = new File("orhancan");
    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
    Document doc = dBuilder.parse(fXmlFile);


    NodeList prelist = doc.getElementsByTagName("body");
    System.out.println(prelist.getLength());

有什么问题?或者,有没有更简单的方法可以从网站中为给定的html标记刮取数据?

有一种更简单的方法可以做到这一点。我建议使用。使用JSoup,您可以执行以下操作

Document doc = Jsoup.connect("http://en.wikipedia.org/").get();
Elements newsHeadlines = doc.select("#mp-itn b a");
或者如果你想要尸体:

Elements body = doc.select("body");
或者,如果您需要所有链接:

Elements links = doc.select("body a");

您不再需要获取连接或处理流。简单。如果您曾经使用过jQuery,那么它与此非常相似

HTML并不总是有效的、格式良好的XML。尝试使用特殊的HTML解析器而不是XML解析器。有几种不同的方案可供选择:


肯定是答案。;-)

首先,谢谢大家!但是什么是#mp itn b a?#mp itn只是一个容器,带有
id=“mp itn”
请参见我的编辑。了解css选择器的工作原理会对您有很大帮助。好的,这正是我需要的,谢谢。库比原始代码更好,我会选择它。首先,您可以使用字符串而不是文件。它进入无限循环的什么地方?可能是因为url的输入流似乎没有结束,所以您遇到了这个问题。