2013-11-21 5 views
0

Я разбираю веб-страницу, и я могу анализировать идентификатор, но не классы .. это то, что я имею в виду; Я разбор всех новостей обертки ID:Как выбрать классы в разборе jsoup

protected String getBlogStats() throws Exception { 
       String result = ""; 
       // get html document structure 
       Document document = Jsoup.connect(BLOG_URL).get(); 
       // selector query 
       Elements nodeBlogStats = document.select("div#news_wrapper"); 
       // check results 
       if(nodeBlogStats.size() > 0) { 
        // get value 
        result = nodeBlogStats.get(0).text(); 
       } 

       // return 
       return result; 
      } 

И это работает, я могу показать все, но мне нужно выбрать только тег h3 внутри этой оболочки, так что я tryied таким образом:

protected String getBlogStats() throws Exception { 
       String result = ""; 
       // get html document structure 
       Document document = Jsoup.connect(BLOG_URL).get(); 
       // selector query 
       Elements nodeBlogStats = document.select("div#news_wrapper .news-col-1 h3"); 
       // check results 
       if(nodeBlogStats.size() > 0) { 
        // get value 
        result = nodeBlogStats.get(0).text(); 
       } 

       // return 
       return result; 
      } 

где news-col-1 - класс .. но активность пуста .. есть ли другой способ писать классы при разборе с jsoup? Благодаря

+0

вы можете написать, как этот getElementsByClassName («yourclassname») –

+0

Не могли бы вы поделиться URL вы пытаетесь разобрать? –

+0

http://www.multiplayer.it –

ответ

2

Один из возможных способов, чтобы получить все теги h3 внутри, что Див используя класс:

Elements nodeBlogStats = doc.select("div.news-col-0 h3"); 

Он не будет работать с .news-col-1, потому что ни один из <h3> тегов не являются прямыми потомками этого дел. Как отметил, идентификатор будет также работать:

Elements nodeBlogStats = doc.select("div#news_wrapper h3"); 

Причиной, побуждающей ваш код возвращается только первый h3 и не все из них, потому что вы настраиваете результат будет только текст первого элемента в nodeBlogStats (когда вы говорите get(0)):

if(nodeBlogStats.size() > 0) { 
    // get value 
    result = nodeBlogStats.get(0).text(); 
} 

Рассмотрим возвращающая List или nodeBlogStats.text() если вы хотите весь текст h3.


Update:

Таким образом, вы могли бы изменить свой метод возвращать ArrayList.

protected ArrayList<String> getBlogStats() throws Exception { 
    // get html document structure 
    Document document = Jsoup.connect(BLOG_URL).get(); 
    // selector query 
    Elements nodeBlogStats = document.select("div#news_wrapper"); 
    // check results 
    ArrayList<String> list = new ArrayList<String>(); 
    for (Element e : nodeBlogStats) { 
     list.add(e.text()); 
    } 
    return list; 
} 
+0

Теперь я пытаюсь .. как вы думаете, сложно создать список, начиная с этого кода? не могли бы вы мне помочь, пожалуйста? Это именно то, что мне нужно :) –

+0

@David_D см. Мой обновленный ответ, надеюсь, что это поможет. – ashatte

+0

mmh что это за ошибка? Оператор '' <> 'не допускается для уровня источника ниже 1.7' никогда не видел .. он находится на 'new ArrayList <>();' –

Смежные вопросы