Jsoup在找不到html元素时抛出异常

时间:2016-03-16 23:13:35

标签: java jsoup

我正在使用jsoup使用java进行爬虫,问题是我抓取的网站并非所有网页都有可以在谷歌地图中显示的地址,当我尝试获取纬度时,我的程序失败了来自谷歌地图的经度和页面没有这个元素可用。

我会检查是否有html元素

   if( !doc.getElementsByTag("noscript").first().select("img").attr("src").isEmpty()){

这是失败的地方,虽然应该检查元素是否为空以避免在控制台上打印出引发异常的信息。

Exception in thread "main" java.lang.NullPointerException
    at ewisemapsTest.MetrosCubicosCrawler.crawlLiga(Unknown Source)
    at ewisemapsTest.MetrosCubicosCrawler.crawl(Unknown Source)
    at ewisemapsTest.MetrosCubicosCrawler.main(Unknown Source)

失败的java代码:

  if( !doc.getElementsByTag("noscript").first().select("img").attr("src").isEmpty()){

                          String latLon = doc.getElementsByTag("noscript").first().select("img").attr("src");


                            int inicio = latLon.indexOf("=")+1;
                            int medio = latLon.indexOf("%");
                            int fin = latLon.indexOf("&");

                            String lat = latLon.substring(inicio, medio);
                            String lon = latLon.substring((medio+3), fin);
                            System.out.println("\nCoordenadas lat:"+lat +" lon: " + lon); 
                          }

我在这里缺少什么?

1 个答案:

答案 0 :(得分:4)

如果集合为空,则

first()返回null。在继续之前,您需要确认它不是。

Element element = doc.getElementsByTag("noscript").first();
if (element != null && !element.select("img").attr("src").isEmpty())
{
}

请注意,您应该仔细检查您正在呼叫的其他方法,并确保您正在处理他们的"失败"案件正确。有些人可能会将空列表转换为空列表,但其他列表可能不会。