知道Url的Jsoup解析页面

时间:2014-01-24 10:17:02

标签: java android parsing href

我面临着一个非常大的问题..我正在解析这个页面http://multiplayer.it/articoli/里面有一些文章..正如你所看到的,我可以解析一些信息:Tile,date文章,评论和文章的一些预览。

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

问题 我不知道该怎么做。但解析每个帖子的网址我可以知道帖子的绝对路径。我可以用这种方式解析它:

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。

问题

是否有可能解析每个页面内容? ('p'代码)谢谢

OnClick方法

lista.setOnItemClickListener(new OnItemClickListener() {

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

1 个答案:

答案 0 :(得分:0)

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

假设您有可能将所有链接存储为Java Collection实例的一部分,如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());
        }
    }

在上面的代码中,它会显示目标网页上提供的所有<p>。以下是输出的屏幕截图:

enter image description here

在上面的代码块中,您可以遍历网页上的所有锚标记,并选择特定的锚链接来获取结果内容:

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插件生成这些动态脚本,并根据您的需要对其进行自定义。