【问题标题】:Parsing error jsoup Android [closed]解析错误jsoup Android [关闭]
【发布时间】:2014-01-23 17:37:46
【问题描述】:

这是我尝试过的代码,但在解析过程中总是出错

Elements sezioni = tabella.getElementsByClass("grid grid-pad");
                                for(Element sezione : sezioni)
                                {

                                        Elements righe_sezione = sezione.getElementsByClass("col-1-1");                                       
                                        for(Element riga : righe_sezione)
                                        {

                                                Element info = riga.getElementsByClass("text").first();


                                                String titolo = riga.getElementsByTag("h2").first().text();


                                                String date= info.getElementsByClass("date").first().text();


                                                titoli.add(titolo);
                                                data.add(date);
                                        }
                                }

我无法解析文章的标题和日期..怎么了?要解析的页面是http://multiplayer.it/articoli/

谢谢

【问题讨论】:

    标签: java android html-parsing getelementbyid


    【解决方案1】:

    jsoup 使用基于 css 的选择器,因此您的 grid grid-pad 将转换为 grid-pad 本身。

    现在代码中似乎存在一个缺陷,其中grid-padcol-1-1 没有覆盖您要查找的文本内容的重复divs

    但是,将您的选择器更改为 textarchive_box 似乎可以解决问题,因为所有内容都在这个带有 css 选择器 archive_box 的 div 中。

    因此,您的代码会跳过 1 个循环并仅循环 text,如下所示:

    try {
                Document doc = Jsoup.connect("http://multiplayer.it/articoli/")
                        .get();
                Elements sezioni = doc.getElementsByClass("archive_box");
                for (Element riga : sezioni) {
    
                    Element info = riga.getElementsByClass("text").first();
    
                    String titolo = riga.getElementsByTag("h2").first().text();
                    System.out.println(titolo);
    
                    String date = info.getElementsByClass("date").first().text();
                    System.out.println(date);
    
                }
    
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    

    输出将是:

    Carmageddon è gratuito per un giorno su App Store e Google Play
    circa un'ora fa
    Paradox Interactive annuncia Runemaster
    circa un'ora fa
    Annunciato Hearts of Iron IV
    circa un'ora fa
    ...
    

    【讨论】:

    • 它有效,但只能在控制台中。为什么我不能在 ArrayList 中添加数据和标题?
    • @End.Game 我将它打印到控制台,您可以轻松地将这 2 个放在您想要的集合实例中,毕竟这些都是每次迭代都会打印的普通字符串值。
    • 好吧好吧,抱歉现在可以了。我的错我忘了初始化数组列表 :-) 无论如何,你认为有可能用 jsoup 进行分页吗?我的意思是,正如你所看到的那样页面有一个分页..你认为可以用 jsoup 来查看下一页中的文章吗?
    • jsoup 不处理动态页面/内容,而只处理静态 html 元素。您可以将HtmlUnit 用于动态行为。检查this 答案,这是尝试处理基于ajax 的页面。万事如意!
    • 谢谢@PopoFibo。我看到你对 jsoup 很好,所以你能帮我解决这个问题stackoverflow.com/questions/21330020/… 吗?我需要浏览我解析的文章。我可以解析每个 url,但我真的不知道如何解析每个内容页面。如果你能帮助我,我会很高兴。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-19
    • 1970-01-01
    • 2014-02-03
    • 2014-05-06
    • 2013-08-27
    相关资源
    最近更新 更多