如何在Java中使用html代码阅读器?

时间:2011-08-13 09:09:11

标签: java html

我知道如何阅读网站的html代码,例如,下一个java代码从http://www.transfermarkt.co.uk/en/fc-barcelona/startseite/verein_131.html读取所有html代码。这是一个显示F.C.的所有足球运动员的网站。巴塞罗那。

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;

public class ReadWebPage {
    public static void main(String[] args) throws IOException {
        String urltext = "http://www.transfermarkt.co.uk/en/fc-barcelona/startseite/verein_131.html";
        URL url = new URL(urltext);
        BufferedReader in = new BufferedReader(new InputStreamReader(url
                .openStream()));
        String inputLine;

        while ((inputLine = in.readLine()) != null) {
            // Process each line.
            System.out.println(inputLine);
        }
        in.close();
    }
}

好的,但现在我需要处理HTML代码,我需要获取名称(“Valdés,Victor”,“Pinto,JoséManuel”等等)和职位(守门员,国防,中场) ,Striker)球队的每个球员。例如,我需要创建一个ArrayList <String> PlayerNames和一个ArrayList <String> PlayerPositions,并将所有玩家的所有名称和位置放在这些数组上。

我怎么做?我找不到可以在google上执行此操作的代码示例..... 欢迎使用代码示例

感谢

5 个答案:

答案 0 :(得分:9)

我建议使用HtmlUnit,这样您就可以访问HTML页面的DOM树,甚至可以在使用AJAX将数据动态放入页面时执行JavaScript。

你也可以使用JSoup:没有JavaScript,但更轻量级,支持CSS选择器。

答案 1 :(得分:2)

我认为最好的方法是首先将HTML代码纯化为有效的XHTML表单,然后应用XSL转换 - 检索可以使用XPATH表达式的部分信息。最好的html标签平衡器在我看来是neko HTML(http://nekohtml.sourceforge.net/)。

答案 2 :(得分:0)

您可能想看一下htmlparser

我用这个类似的东西。

使用类似这样的东西:

Parser fullWebpage = new Parser("WEBADDRESS");
NodeList nl = fullWebpage.extractAllNodesThatMatch(new TagNameFilter("<insert html tag>"));

        NodeList tds  = nodes.extractAllNodesThatMatch(new TagNameFilter("a"),true);

            String data =  tds.toHtml();

答案 3 :(得分:0)

Java有自己的内置HTML解析器。这个解析器的一个积极特征是它具有容错性,并且即使它们丢失或拼写错误也会假设某些标记。虽然名为swing.text.html.Parser,但它实际上并没有与Swing共享(只有文本和HTML一样是文本)。使用ParserDelegator。您需要编写callback以便与此解析器一起使用,否则使用起来并不复杂。可以找到代码示例(写为ParserDelegator测试)here。有人说它提醒了HotJava browser。它的唯一问题似乎没有升级到最新版本的HTML。

简单的代码示例是

Reader reader; // read HTML from somewhere
HTMLEditorKit.ParserCallback callback = new MyCallBack(); // Implement that interface.
ParserDelegator delegator = new ParserDelegator();
delegator.parse(reader, callback, false);

答案 4 :(得分:0)

我找到了一个正是您所寻找的链接: http://tiny-url.org/work_with_html_java