Jsoup没有检测引号中的文字

时间:2014-04-30 23:39:18

标签: jsoup

我正在使用Jsoup来解析网站。我正在解析这个类:

<td class="tl">
<script> document.write(Icons.GetShortDescription(1, 'CurrentWeather'));</script>
"Despejado"<span class="details">   
</span>
</td>

Jsoup无法检测到文本&#34; Despejado。&#34;这是相关代码:

    url="http://freemeteo.ar.com/eltiempo/mendoza/historia/historial-diario/?gid=3844421&date=2010-07-02&station=23812&language=spanishar&country=argentina";
    doc = Jsoup.connect(url).get();
    i=0;
    Elements lineks = doc.select("table.daily-history");
    for (Element linek : lineks) {
        Elements datos=linek.select("tbody");
                    for(Element dato : datos){
                        Elements datos5 = dato.select("td.tl");
                                            System.out.println("code class:" + datos5.html()); 

                                    }
   }

输出结果为:

code class: <script>
          document.write(Icons.GetShortDescription(1, 'CurrentWeather'));
        </script><span class="details"> </span>

Jsoup没有阅读&#34; despejado。&#34;问题是什么?

  • bug Jsoup?
  • 问题是网站?

请帮助我理解如何阅读文字&#34; despejado&#34;?**

1 个答案:

答案 0 :(得分:0)

好的,我明白了。

Jsoup无法获得“despejado”,因为在JavaScript脚本将其打开之前,它不存在于网站上。所以Jsoup没有选择或获取。 Jsoup是一个html解析器而不是JavaScript解析。但是,我想我已经明白了。

JavaScript脚本在顶部声明,如果你去查看,你会看到在页面上放置“despejado”和其他描述的脚本:

<script type="text/javascript" src="/Services/IconDescriptions/Index/37/g.js"></script>

好的,所以如果你去查看那个脚本,你会看到这个巨大的脚本文件,这里有一些:

var Icons = {
    "Forecast":{
        "1":{"Description":"Buen tiempo","ShortDescription":"Despejado"},
        "2":{"Description":"Pocas nubes","ShortDescription":"Pocas nubes"},
        "3":{"Description":"Cielos parcialmente cubiertos","ShortDescription":"Parcialmente cubierto"},
        "4":{"Description":"Cielos cubiertos","ShortDescription":"Cubierto"},

......还有150多个

好的,现在知道了,你可以使用它:

Elements elements = doc.select("table.daily-history tbody td.tl script");

        int number;
        String numberString;

        for (Element element: elements){

            // here's what you had
            System.out.println("code class: " + element.html());

            // get the html as a string
            numberString = element.html();

            // isolate the number you need
            numberString = numberString.substring(numberString.lastIndexOf("(")+1,numberString.lastIndexOf(" ") -1);

            // parse to integer
            number = Integer.valueOf(numberString);
            System.out.println("number: " + number);


        }

我在那里保留了额外的String代码以帮助您理解。所以,这是系统输出:

code class: document.write(Icons.GetShortDescription(1, 'CurrentWeather'));
number: 1

现在,您可以使用“1”的“数字”并将其交叉引用到JavaScript文件以获得“简短描述”,即“despejado”。我检查了日历上的其他几个日期以了解不同的条件,它确实有效。

我希望有一种更简单的方法,但这会有效。如果您可以找到该网站的纯文本版本,那么应该可以轻松实现。网站有时会为盲人用屏幕阅读器提供更简单的版本。祝你好运!