Как выбрать n-й элемент определенного типа вive? - PullRequest
4 голосов
/ 23 апреля 2010

Я пытаюсь очистить некоторые данные со страницы с помощью табличного макета. Итак, чтобы получить некоторые данные, мне нужно получить что-то вроде 3-й таблицы внутри 2-й таблицы внутри 5-й таблицы внутри 1-й таблицы внутри тела. Я пытаюсь использоватьive, но не могу понять, как использовать nth-of-type и другие шаги селектора. Что еще хуже, у рассматриваемой страницы есть одна таблица верхнего уровня внутри тела, но (выберите data [: body:>: table]) по некоторым причинам возвращает 6 результатов. Что, черт возьми, я делаю не так?

1 Ответ

7 голосов
/ 23 апреля 2010

Для nth-of-type, поможет ли следующий пример?

user> (require '[net.cgrand.enlive-html :as html])
user> (def test-html
           "<html><head></head><body><p>first</p><p>second</p><p>third</p></body></html>")
#'user/test-html
user> (html/select (html/html-resource (java.io.StringReader. test-html))
                   [[:p (html/nth-of-type 2)]])
({:tag :p, :attrs nil, :content ["second"]})

Не имею понятия о втором выпуске. Ваш подход работает с наивным тестом:

user> (def test-html "<html><head></head><body><div><p>in div</p></div><p>not in div</p></body></html>")
#'user/test-html
user> (html/select (html/html-resource (java.io.StringReader. test-html)) [:body :> :p])
({:tag :p, :attrs nil, :content ["not in div"]})

Есть ли шанс посмотреть ваш фактический HTML?

Обновление: (в ответ на комментарий)

Вот еще один пример, где возвращается «второй <p> внутри <div> внутри второго <div> внутри чего угодно»:

user> (def test-html "<html><head></head><body><div><p>this is not the one</p><p>nor this</p><div><p>or for that matter this</p><p>skip this one too</p></div></div><span><p>definitely not this one</p></span><div><p>not this one</p><p>not this one either</p><div><p>not this one, but almost</p><p>this one</p></div></div><p>certainly not this one</p></body></html>")
#'user/test-html
user> (html/select (html/html-resource (java.io.StringReader. test-html))
                   [[:div (html/nth-of-type 2)] :> :div :> [:p (html/nth-of-type 2)]])
({:tag :p, :attrs nil, :content ["this one"]})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...