2011-08-13 98 views
-10

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

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(); 
    } 
} 

OK,但现在我需要的HTML代码的工作,我需要获得名称(“巴尔德斯,维克多”,“平托,若泽·曼努埃尔·”等)和位置(守门员,国防队,中场,前锋)队的每个球员。例如,我需要创建一个ArrayList <String> PlayerNamesArrayList <String> PlayerPositions,并将这些数组放在所有球员的名字和位置上。

我该怎么办呢?我无法找到的代码示例,可以做到这对谷歌..... 代码示例,欢迎

感谢

回答

9

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

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

+0

抱歉太难为我 – NullPointerException

+2

它不应该是很难所有。仔细检查HTML源代码:包含播放器的表的ID为“spieler”。你只需要做一个getElementById(“spieler”)来获得这张表。使用JSoup时,document.select(“#spieler td.s10 a”)应返回包含玩家名称的所有元素。只需一行代码。 –

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(); 
+0

谢谢,但这段代码没有为我工作,因为网站有很多节点具有相同的标签,节点具有球员的名称和球员的位置...... :( – NullPointerException

2

我认为最好的办法是先净化HTML代码插入到有效的XHTML形式,并把它们应用XSL转换 - 用于检索的,你可以使用XPath一部分信息表达式。最好的html标签平衡器在我看来是neko HTML(http://nekohtml.sourceforge.net/)。

+0

请你可以给我至少有这样的代码示例与玩家的名字吗?我开始使用java和html,这对我来说太难了,就像JB Nizet – NullPointerException

+3

@Android的答案:通过学习和努力,你可以学习为了“太难”而退出。退出要求* codeh *。 –

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);