2015-01-15 1 views
1

Я пытаюсь использовать очень специфический селектор jsoup для вытягивания некоторых данных со страницы, однако он кажется первым экземпляром: eq выключен одним , Например, для страницы: Example PageJSOUP Не удается найти элемент:: eq кажется отключенным на 1

Я использую следующий селектор, чтобы выбрать название статьи:

html>body>article:eq(0)>div:eq(0)>header>h1 

фрагмент HTML, от страницы выглядит как:

Snippet

Таким образом, вышеприведенный селектор не работает, но интересно, что это делает, когда первое использование eq имеет свой индекс, на который наложен один.

html>body>article:eq(1)>div:eq(0)>header>h1 

код я использую:

Document doc = null; 

try { 
    doc = Jsoup.connect("http://antonioleiva.com/material-design-everywhere/") 
      .userAgent("Mozilla/5.0 (Linux; Android 4.4; Nexus 4 Build/KRT16H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36") 
      .get(); 
    Element ele = doc.select(toast).first(); 
    if(ele != null){ 
     System.out.println(ele.text()); 
    } 

} catch (IOException e) { 
    e.printStackTrace(); 
} 

Я также подтвердил то же самое, что происходит на: Try Jsoup Online

Есть идеи? Благодаря!

+0

Ничего себе, это так странно. Я смог воспроизвести его. – BoltClock

ответ

2

jsoup's selector documentation очень редкий, даже если речь идет о нестандартных селекторах, таких как :lt(), :gt() и :eq(). Эти примеры не являются очень полезными либо:

:lt(n) элементы, родственный индекс меньше п
td:lt(3) находит первые 2 клетки каждой строки

:gt(n) элементы, родственный индекс больше п
td:gt(1) находит клетку после пропуска первых два

:eq(n) элементы, родственный индекс равен п

Основываясь на том, что мало что делает сказать, однако, я думаю, версия, что jsoup по :lt(), :gt() и :eq() являются не более чем нулевой индексированных версий :nth-child(), что означает, что article:eq(0) функционально эквивалентен article:nth-child(1) и article:eq(1) - article:nth-child(2).

Это очень не похоже на их коллегам jQuery, which behave completely differently from :nth-child(). Во всяком случае, jsoup кажутся совершенно лишними, не говоря уже о излишней запутанности для тех, кто знаком с селекторами jQuery.

Но опять же, ни один из этих селекторов никогда не были частью стандарта, чтобы начать с, так что в то время как документация jsoup могла бы быть намного яснее, это не неправильно его реализовать их по-разному с JQuery (хотя я все еще приходится сомневаться, почему они потрудились их реализовать в первую очередь). Вот почему я избегаю нестандартных селекторов, таких как чума, если нет других альтернатив.

Поскольку эти селекторы ничего :nth-child() не сделать уже не может делать в jsoup, вы лучше использовать стандартные селекторы:

html>body>article:nth-child(2)>div:nth-child(1)>header>h1 
+0

eq (0) не работает. и эти селекторы являются частью css3, нет? – momomo

+0

@momo: Нет, их нет, и их никогда не было. – BoltClock

+0

http://www.w3schools.com/cssref/sel_nth-child.asp – momomo

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