Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSoup不会获取所有项目吗?_Java_Html_List_Parsing_Jsoup - Fatal编程技术网

Java JSoup不会获取所有项目吗?

Java JSoup不会获取所有项目吗?,java,html,list,parsing,jsoup,Java,Html,List,Parsing,Jsoup,因此,我尝试使用JSoup解析一个简单的列表。不幸的是,程序只返回列表中以N开头的条目。我不知道为什么会这样。这是我的密码: public ArrayList<String> initializeMangaNameList(){ Document doc; try { doc = Jsoup.connect("http://www.mangahere.com/mangalist/").get();

因此,我尝试使用JSoup解析一个简单的列表。不幸的是,程序只返回列表中以N开头的条目。我不知道为什么会这样。这是我的密码:

    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;
}
public ArrayList initializeMangaNameList(){
文件文件;
试一试{
doc=Jsoup.connect(“http://www.mangahere.com/mangalist/).get();
元素项=doc.getElementsByClass(“漫画信息”);
ArrayList name=新的ArrayList();
对于(元素项:项){
name.add(item.text());
}
返回姓名;
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}

那么,为什么列表不包含所有条目呢?网页有错误吗?或者解析器?我可以使用变通方法绕过此问题吗?首先是什么导致了问题?

好的,问题是由JSoup版本1.72及更高版本的更改引起的。您只需更改默认设置,如下所示:

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;
public ArrayList initializeMangaNameList(){
文件文件;
试一试{
doc=Jsoup.connect(“http://www.mangahere.com/mangalist/).maxBodySize(0.get();
元素项=doc.getElementsByClass(“漫画信息”);
ArrayList name=新的ArrayList();
对于(元素项:项){
name.add(item.text());
}
返回姓名;
}捕获(IOE异常){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回null;
}

重要的区别是将maxBodySize设置为0,以便允许无限大小的文件。有关更多信息,请参阅。
这将允许您拥有无限的正文大小并加载所需的所有数据。

刚刚使用jsoup-1.6.1测试了您的代码,它返回11906个结果,这是正确的。jsoup 1.7.2只返回7031个结果。BINGO发现了问题:1.72 changelog向jsoup.Connection添加了最大正文响应大小,防止在尝试读取超大文档时内存不足。默认值为1MB。@Skyloon您应该回答问题并将其标记为已关闭。不要只是把它留在评论里。这是一个非常有趣的案例,它肯定会帮助其他人。这应该在jsoup的主要文档中提到。谢谢,你救了我一天