【问题标题】:Jsoup parsing page knowing UrlJsoup解析页面知道Url
【发布时间】:2014-02-15 06:58:30
【问题描述】:

我面临一个非常大的问题.. 我正在解析这个页面http://multiplayer.it/articoli/ 和一些文章.. 正如你所看到的,我可以解析一些信息:平铺,日期文章,cmets 和文章的小预览。

目标: 我的目标是点击我解析的文章(这个操作已经可以了,我有我在下面写的信息的列表)和onClick我想进入文章本身来查看内容。示例:如果我现在点击第一篇文章,它会将我带到这个 URL:http://multiplayer.it/notizie/127771-peter-moore-getta-acqua-sul-fuoco-e-descrive-nintendo-come-un-grande-partner-per-ea.html,其中包含我需要查看的所有内容。应用程序也必须这样做。

问题 我不知道该怎么做。但是解析每个帖子的url我可以知道帖子的绝对路径。我可以这样解析:

try {

                        Document doc = Jsoup.connect(BLOG_URL).get();
                        Elements links = doc.select("div.col-1-1 h2 a[href]"); 

                        for(Element sezione : links)
                        {

                            Log.d("Links",  sezione.attr("abs:href"));
                        }
                    } catch (Exception e) {

                        Log.e("ERROR", "Parsing Error");
                    }

它返回每个href。

问题

是否有可能知道 href 解析每个页面的内容? ('p' 标签)谢谢

OnClick 方法

lista.setOnItemClickListener(new OnItemClickListener() {

                @Override
                public void onItemClick(AdapterView<?> parent, View view,
                        int position, long id) {
                    //What here?
                }
            });

【问题讨论】:

  • 所以你想点击 url 并从“结果”页面中删除元素?
  • 是的!这正是我想要的。点击我列表中的一篇文章,我想在它的 url 中“输入”。我不知道你是否明白 :) 我需要把每个孩子都接过来。
  • @PopoFibo 你还在吗?
  • 非常好,正在起草回复:)
  • ups 对不起 :) 我正在等待答复 :) 谢谢

标签: java android parsing href


【解决方案1】:

jsoup 不会处理您在网页上的动态操作。您需要使用可以处理这些动态执行的 API - 例如 HtmlUnit

假设您有可能将所有链接存储为 Java 集合实例的一部分,例如 ArrayList。如果我尝试以特定方法的形式解析第一个 url(可以循环以在运行时动态获取页面上所有 url 的内容):

使用 HtmlUnit

public static void main(String... args)
            throws FailingHttpStatusCodeException, IOException {
        final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_17);

        WebRequest request = new WebRequest(
                new URL(
                        "http://multiplayer.it/articoli/"));

        webClient.getOptions().setThrowExceptionOnScriptError(false);
        webClient.setJavaScriptTimeout(10000);
        webClient.getOptions().setJavaScriptEnabled(true);
        webClient.setAjaxController(new NicelyResynchronizingAjaxController());
        webClient.getOptions().setTimeout(10000);

        HtmlPage page = webClient.getPage(request);
        webClient.waitForBackgroundJavaScript(10000);

        System.out.println("Current page: Articoli videogiochi - Multiplayer.it");

        // Current page:
        // Title=Articoli videogiochi - Multiplayer.it
        // URL=http://multiplayer.it/articoli/

        List<HtmlAnchor> anchors1 =  page.getAnchors();
        HtmlAnchor link2 = null;
        for(HtmlAnchor anchor: anchors1)
        {
             if(anchor.asText().indexOf("Dead Rising 3: Operation Broken Eagle") > -1 )
             {
                  link2 = anchor;
                  break;
             }
        }
        page = link2.click();

        System.out.println("Current page: Dead Rising 3: Operation Broken Eagle - Recensione - Xbox On...");

        // Current page:
        // Title=Dead Rising 3: Operation Broken Eagle - Recensione - Xbox On...
        // URL=http://multiplayer.it/recensioni/127745-dead-rising-3-operation-broken-eagle-una-delle-storie-di-los-perdidos.html


        webClient.waitForBackgroundJavaScript(10000);

        DomNodeList<DomElement> paras = page.getElementsByTagName("p");
        for (DomElement el : paras.toArray(new DomElement[paras.size()])) {
            System.out.println(el.asText());
        }
    }

在上面的代码中,它显示了登陆页面上所有可用的&lt;p&gt;。下面是输出的截图:

在上面的代码块中,你可以循环遍历网页上的所有锚标签,我选择一个特定的锚链接来获取结果内容:

List<HtmlAnchor> anchors1 =  page.getAnchors();
            HtmlAnchor link2 = null;
            for(HtmlAnchor anchor: anchors1)
            {
                 if(anchor.asText().indexOf("Dead Rising 3: Operation Broken Eagle") > -1 )
                 {
                      link2 = anchor;
                      break;
                 }
            }

您可能需要正确的逻辑来解析页面上的所有动态链接并显示它们的内容。

编辑:

您可以尝试通过htmlunitscripter Firefox 插件生成这些动态脚本,稍后也可以根据您的需要对其进行自定义。

【讨论】:

  • 哇!谢谢!那么,它如何与方法 onClick 一起工作?用 onClick 方法看看我的编辑
  • 还有,我必须打开一个新活动来显示新内容吗?
  • 以上是一个独立的例子,它负责点击 url 并获取内容。我想您可能需要从page = link2.click(); 开始尝试(这是自动点击页面的地方)。
  • 我必须研究这种方法,因为它看起来很复杂:(。例如..我已经无法理解是否必须创建另一个活动来显示每个页面的内容以及如何传递数据点击。
  • 我正在尝试启动应用程序,但似乎无法启动。 mmh... android 的库也对吗?
猜你喜欢
  • 2012-12-22
  • 2015-09-04
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-06
  • 2015-06-06
  • 1970-01-01
相关资源
最近更新 更多