Я не нашел документации, ни учебного руководства для этого. Чему-нибудь нравится, которые существуют?
doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr')
Код выше получит меня любой table
, где угодно это имеет a tbody
ребенок с атрибутом id
равняйтесь "threadbits_forum_251". Но почему это запускается с дважды //
? Почему существует /tr
в конце? См. "HTML-таблицу II Ruby Nokogiri Parsing" для получения дополнительной информации.
Может кто-либо говорить мне, как извлечь href
, id
, alt
, src
, и т.д., с помощью Nokogiri?
td[3]/div[1]/a/text()' <--- extracts text
Как я могу извлечь другие вещи?
Кажется, вам нужно прочитать XPath Tutorial
Ваше //table/tbody[@id="threadbits_forum_251"]/tr
выражение означает:
//
- В любом месте вашего XML документаtable/tbody
- возьмите элемент таблицы с дочерним tbody[@id="threadbits_forum_251"]
- , где атрибут id равен "threadbits_forum_251"tr
- и берем его tr
элементы- так что, в общем, вам нужно знать:
@
[]
скобокЕсли я правильно понял этот API, то можно идти с doc. xpath("td[3]/div[1]/a")["href"]
или td[3]/div[1]/a/@href
, если есть только один элемент .
Ваш XPath верен, и Вы, кажется, ответили на первую часть (почти) Вашего собственного вопроса:
doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr')
"код выше приведет меня к любой table table's tr, where, имеющей дочерний элемент tbody с атрибутом id равным threadbits_forum_251"
//
означает, что следующий элемент может появиться где угодно в документе.
/tr
в конце означает, что получаем tr
узел совпадающего элемента.
Нет необходимости извлекать каждый атрибут по одному. Просто получите весь узел, содержащий все четыре атрибута в Нокогири, и получите атрибуты, используя:
theNode['href']
theNode['src']
Где узел
- ваш объект Нокогири Node.
Edit:
Извините, что не использовал эти библиотеки, но думаю, что оценка и разбор XPath выполняется с помощью Mechanize. Итак, вот как вы получите весь элемент и его атрибуты за один раз.
doc.xpath("td[3]/div[1]/a").each do |anchor|
puts anchor['href']
puts anchor['src']
...
end