2013-11-20 17 views
7

Also, ich versuche, eine einfache Liste mit JSoup zu analysieren. Leider gibt das Programm nur die Einträge bis zu den Einträgen zurück, die in der Liste mit N beginnen. Ich weiß nicht, warum das so ist. Hier ist mein Code:JSoup wird nicht alle Artikel abrufen?

public ArrayList<String> initializeMangaNameList(){ 
     Document doc; 
     try { 
      doc = Jsoup.connect("http://www.mangahere.com/mangalist/").get(); 
      Elements items = doc.getElementsByClass("manga_info"); 
      ArrayList<String> names = new ArrayList<String>(); 
      for(Element item: items){ 
       names.add(item.text()); 
      } 
      return names; 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
} 

Also warum enthält die Liste nicht alle Einträge? Gibt es einen Fehler mit der Webseite? Oder vielleicht der Parser? Kann ich eine Problemumgehung verwenden, um dieses Problem zu umgehen? Und was verursacht das Problem an erster Stelle?

+0

habe gerade Ihren Code mit jsoup-1.6.1 getestet und gibt 11906 Ergebnisse zurück, was korrekt ist. – melc

+0

JSoup 1.7.2 gibt nur 7031 Ergebnisse zurück. – Skylion

+0

BINGO DAS PROBLEM GEFUNDEN: 1.72 changelog Eine maximale Körperantwortgröße zu Jsoup.Connection hinzugefügt, um zu verhindern, dass beim Lesen von extrem großen Dokumenten der Arbeitsspeicher knapp wird. Der Standardwert ist 1 MB. – Skylion

Antwort

18

Okay, die Ausgabe wurde durch eine Änderung in JSoup Version 1.72 und höher verursacht. Sie müssen nur, wie so die Standardeinstellungen ändern:

public ArrayList<String> initializeMangaNameList(){ 
    Document doc; 
    try { 
     doc = Jsoup.connect("http://www.mangahere.com/mangalist/").maxBodySize(0).get(); 
     Elements items = doc.getElementsByClass("manga_info"); 
     ArrayList<String> names = new ArrayList<String>(); 
     for(Element item: items){ 
      names.add(item.text()); 
     } 
     return names; 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return null; 

}

Der wesentliche Unterschied der maxBodySize auf 0 setzt, so dass es Dateien unbegrenzter Größe erlaubt. Weitere Informationen finden Sie in der documentation. Damit können Sie unbegrenzte Körpergröße haben und laden Sie alle Daten, die Sie benötigen.

+0

Großartig. Upvoted Frage und Antwort. Es wird nützlich sein. – alkis

+0

Dies sollte in der Hauptdokumentation von jsoup erwähnt werden. Vielen Dank. – appl3r