2014-01-24 3 views
0

Я перед очень большой проблемой для меня .. Я разбираю эту страницу http://multiplayer.it/articoli/ с некоторыми статьями .. Как вы можете видеть, есть некоторые сведения, которые я могу проанализировать: Плитка, дату статьи, комментарии и небольшой предварительный просмотр статьи.Jsoup parsing page зная Url

ЦЕЛЬ: Моя цель нажмите на статью я анализирую (эту операцию это уже хорошо, у меня есть список с информациями я писал ниже) и onClick я хочу войти в самой статье, чтобы увидеть содержимое , Пример: если я щелкнул в первой статье прямо сейчас, он приносит мне по этому адресу: 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.

ВОПРОС

Можно knwoing HREF разобрать каждую содержимое страницы? ('p' тег) спасибо метод

OnClick

lista.setOnItemClickListener(new OnItemClickListener() { 

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

Итак, вы хотите щелкнуть по URL-адресу и очистить элементы от «результирующей» страницы? – PopoFibo

+0

Да! Это именно то, чего я хочу.нажав на статью в моем списке, я хочу «ввести» в свой url. Я не знаю, понимаете ли вы :) Мне нужен выбор для каждого ребенка. –

+0

@PopoFibo ты все еще здесь? –

ответ

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; 
       } 
      } 

Возможно, вы захотите выбрать подходящую логику для анализа всех динамических ссылок на вашей странице и отображения их содержимого.

EDIT:

Вы можете попробовать генерировать эти динамические сценарии через htmlunitscripter Firefox плагин и настроить его позже для ваших нужд тоже.

+0

Wow amazing answere !! Благодаря! Итак, как это работает с методом onClick? Взгляните на мое редактирование с помощью метода onClick –

+0

и, должен ли я открыть новое действие для отображения нового контента? –

+0

Ну, это вышеописанный пример, который заботится о том, чтобы щелкнуть URL-адрес и получить содержимое. Думаю, для вас вам нужно попробовать с помощью 'page = link2.click();' onwards (это то, где страница автоматически получает щелчок). – PopoFibo