Rad*_*dek 25 ruby xpath nokogiri
我没有找到任何文档或教程.这样的事情存在吗?
doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr')
Run Code Online (Sandbox Code Playgroud)
上面的代码会让我任何table地方都有一个tbody属性id等于"threadbits_forum_251" 的子节点.但为什么从双开始//呢?为什么/tr最后呢?有关更多详细信息,请参阅" Ruby Nokogiri解析HTML表II ".
谁能告诉我如何提取href,id,alt,src,等,采用引入nokogiri?
td[3]/div[1]/a/text()' <--- extracts text
Run Code Online (Sandbox Code Playgroud)
我怎样才能提取其他东西?
Rub*_*ias 45
似乎您需要阅读XPath教程
你的//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如果只有一个<a>元素.
你的XPath是正确的,你似乎已经回答了你自己的问题的第一部分(差不多):
doc.xpath('//table/tbody[@id="threadbits_forum_251"]/tr')
Run Code Online (Sandbox Code Playgroud)
"上面的代码会在任何地方给我任何表格的tr ,它有一个tbody子节点,其属性id等于threadbits_forum_251"
// 表示以下元素可以出现在文档中的任何位置.
/tr最后意味着,获取tr匹配元素的节点.
您不需要逐个提取每个属性.只需获取包含Nokogiri中所有四个属性的整个节点,并使用以下命令获取属性:
theNode['href']
theNode['src']
Run Code Online (Sandbox Code Playgroud)
theNode你的Nokogiri Node对象在哪里?
编辑:
对不起,我没有使用过这些库,但我认为XPath评估和解析是由Mechanize完成的.所以这就是你如何一次性获得整个元素及其属性.
doc.xpath("td[3]/div[1]/a").each do |anchor|
puts anchor['href']
puts anchor['src']
...
end
Run Code Online (Sandbox Code Playgroud)