【问题标题】:Android using JSOUP for HTMLAndroid 使用 JSOUP 处理 HTML
【发布时间】:2014-01-12 06:38:19
【问题描述】:

当我使用 JSOUP 解析这个 html 文档时,我完全迷茫了……

我并不是要直接要求代码,但如果有人有时间或可以让我开始,那就太好了...

这是文档: http://radar.weather.gov/ridge/RadarImg/N0R/ILN/

如果您查看我正在尝试获取这些行的源代码:

<tr><td valign="top"><img src="/icons/image2.gif" alt="[IMG]"></td><td><a href="ILN_20140112_0021_N0R.gif">ILN_20140112_0021_N0R.gif</a></td><td align="right">12-Jan-2014 00:23  </td><td align="right">2.2K</td><td>&nbsp;</td></tr>

正如您所注意到的,其中有很多...我需要

中的值
<a href=

我还需要前十行中的值...

正如我所说,如果有人有时间帮助我,将不胜感激!

【问题讨论】:

  • 我建议你阅读cookbook
  • 你需要这个“ILN_20140112_0021_N0R.gif”作为值吗?
  • Yasir:是的,我需要那个字符串
  • 如果可能*我需要前 10 行的字符串

标签: java html-parsing jsoup


【解决方案1】:

首先你需要将HTML的内容存入一个Document中(解释更多here):

String url = "http://radar.weather.gov/ridge/RadarImg/N0R/ILN/";    
Document doc = Jsoup.connect(url).get();

接下来从文档中选择您想要的元素(请参阅here)。在以下行中,它将选择所有具有href 属性且包含字符串"gif"&lt;a&gt; 元素:

Elements links = doc.select("a[href]:contains(gif)");

然后要打印前十个中的值,您可以使用循环。 attr() 方法允许您仅提取某个属性的值,而不是完整的 HTML 或其文本:

for (int i=0;i<10;i++) {
    System.out.println(links.get(i).attr("href"));
}

输出是:

ILN_20140112_0221_N0R.gif
ILN_20140112_0227_N0R.gif
ILN_20140112_0232_N0R.gif
ILN_20140112_0237_N0R.gif
ILN_20140112_0242_N0R.gif
ILN_20140112_0248_N0R.gif
ILN_20140112_0253_N0R.gif
ILN_20140112_0258_N0R.gif
ILN_20140112_0303_N0R.gif
ILN_20140112_0308_N0R.gif

这基本上是您将在 Jsoup 中进行的大多数解析的基本方法。您应该尝试从页面中提取一些其他元素(使用 this page 供参考)。

【讨论】:

  • 非常感谢!我只是不擅长解析器!我大麦以标准化的方式解析 XML!先生,我认为您非常感谢您的时间,更感谢您的深入解释!
  • @user3047494 很高兴为您提供帮助。请注意,我刚刚修复了 for 循环中的一个小错误,因此它现在应该正确输出前十个。
  • 谢谢 :) 有学习 JSOUP 的好网站吗?我真的很喜欢 HTML 解析器的想法!
【解决方案2】:

试试这个

String TestUrl = "<tr><td><img src='/icons/image2.gif' alt='[IMG]'></td><td><a href='ILN_20140112_0021_N0R.gif'>ILN_20140112_0021_N0R.gif</a></td><td align='right'>12-Jan-2014 00:23</td><td align='right'>2.2K</td><td>&nbsp;</td></tr>";
Document doc =  Jsoup.parse(TestUrl);
Element link = doc.select("a").first();
/**
* value will be "ILN_20140112_0021_N0R.gif"
*/
String value = link.text();

【讨论】:

    【解决方案3】:

    编辑:请参阅 @ashatte 的解决方案。

    Document doc = Jsoup.parse
                     (new URL("http://radar.weather.gov/ridge/RadarImg/N0R/ILN/"),
                        3000); 
              //Or whatever your link is; 3000 is timeout
    
                int ignoreCount = 0; 
                //using a counter to ignore top 2 lines 
                for (Element item : doc.select("tr")) {
                // Selects the <tr> elements so item is a single <tr>
                    if (a > 1) {
                        Element link = item.select("a").first(); 
                             // selects first <a> element
                        if (link != null && link.hasAttr("href"))
                            String href = link.attr("href"));
                             // fetches href attribute from the selected <a> 
                    }
                    a++;
                }
    

    这只是众多方法中的一种。我强烈建议你阅读JSOUP cookbook

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-19
      • 1970-01-01
      相关资源
      最近更新 更多