我正在使用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;问题是什么?
请帮助我理解如何阅读文字&#34; despejado&#34;?**
答案 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”。我检查了日历上的其他几个日期以了解不同的条件,它确实有效。
我希望有一种更简单的方法,但这会有效。如果您可以找到该网站的纯文本版本,那么应该可以轻松实现。网站有时会为盲人用屏幕阅读器提供更简单的版本。祝你好运!