【问题标题】:How to work with html code readed on Java?如何使用在 Java 上读取的 html 代码?
【发布时间】:2011-10-26 08:15:34
【问题描述】:

我知道如何读取一个网站的 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”等)和位置(守门员,后卫,中场) , 前锋) 的球队的每个球员。例如,我需要创建一个ArrayList <String> PlayerNames 和一个ArrayList <String> PlayerPositions 并将所有玩家的所有姓名和位置放在这些数组中。

我该怎么做???我在 google 上找不到可以做到的代码示例.....欢迎使用代码示例

谢谢

【问题讨论】:

    标签: java html


    【解决方案1】:

    我建议使用HtmlUnit,它可以让您访问 HTML 页面的 DOM 树,甚至可以在使用 AJAX 将数据动态放入页面的情况下执行 JavaScript。

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

    【讨论】:

    • 应该不难。仔细检查 HTML 源代码:包含播放器的表的 ID 为“spieler”。您只需执行 getElementById("spieler") 即可获取此表。使用 JSoup,document.select("#spieler td.s10 a") 应该返回所有包含玩家名称的 元素。只需一行代码。
    • 请您编辑您的答案并给我执行此操作的代码示例并将所有玩家的姓名放入字符串数组列表中???我做不到
    • 问另一个问题,展示您尝试过的内容并解释您不理解的内容。
    • @AndroidUser99:回学校学习礼貌和阅读。只有一个元素具有 ID spieler。就像 如果你对 HTML 一无所知,并且不尊重那些免费帮助你的人,你将永远无法做任何事情。如果您想要一些免费代码而不试图理解和学习,那么请聘请开发人员。我的费用是每天 600 欧元。
    • 很好的答案 - JSoup 很棒。太糟糕了,OP 只想剪切和粘贴。
    【解决方案2】:

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

    【讨论】:

    • 请你给我一个代码示例,至少用球员的名字来做这件事吗?我从 java 和 html 开始,这对我来说太难了,就像 JB Nizet 的回答一样
    • @Android:通过学习和努力,你可以学会克服“太难”的一点。停止询问teh codez
    【解决方案3】:

    你不妨看看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();
    

    【讨论】:

    • 谢谢,但这段代码对我不起作用,因为该网站有很多节点,这些节点与具有球员姓名和球员位置的节点具有相同的标签...... :(
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-25
        • 2020-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多