在抓取许多页面后收到错误java.lang.NullPointerException

时间:2014-02-24 20:55:48

标签: java nullpointerexception web-crawler

我试图从高级标题搜索页面(http://www.imdb.com/search/title?count=250&title_type=feature&view=simple)抓取imdb精选影片,这是我的代码的一部分:

for(int start=1; start < 295378; start+=250)

    try {
        String baseUrl = "http://www.imdb.com/search/title?start="+start+";count="+count+"&title_type=feature&view=simple";  
        org.jsoup.Connection con = Jsoup.connect(baseUrl).userAgent("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21");
        con.timeout(30000).ignoreHttpErrors(true).followRedirects(true);
        Response resp = con.execute();
        Document doc = null;
        if (resp.statusCode() == 200) {
            doc = con.get();                                      

            Elements myElements = doc.getElementsByClass("results").first().getElementsByTag("table");

            Elements trs = myElements.select(":not(thead) tr");

一切顺利到100239号,我收到了这个错误:

 java.lang.NullPointerException
at featuredfilms.cinemamovies.main(cinemamovies.java:44)

代码仍可用于1到100238号的电影,而且之后无法使用! 请原谅,如果这是显而易见的事情,因为我是Crawling和java的新手。我很感激,如果有人告诉我为什么会收到此错误,我该如何解决?

谢谢,

1 个答案:

答案 0 :(得分:1)

可能是在一定数量的元素之后,返回的DOM结构与之前的页面不同,可能是因为它包含的元素较少。

我建议将此行拆分为单独的变量和方法调用,以跟踪这些链式语句中的哪一个在您的情况下返回null

Elements myElements = doc.getElementsByClass("results").first().getElementsByTag("table");

也许这样的事情会起作用(我不确定类型):

Elements elementsByClass = doc.getElementsByClass("results");
Element firstResult = elementsByClass.first();
Elements myElements = firstResult.getElementsByTag("table");

在这种情况下,当您发现返回null的语句时,可以轻松添加空安全检查。

修改

如果您查看此链接以查看当您获得最大数字时会发生什么,它解释了为什么table.results元素不会出现在您的情况中:

http://www.imdb.com/search/title?at=0&count=250&sort=moviemeter,asc&start=295250&title_type=feature&view=simple