Nokogiri:获取不在 <a> 标签内的文本
Nokogiri: Get text which is not inside the <a> tag
看看这个例子:
<li><a href="http://website.com/">This is a website</a>, it belongs to John Sulliva</li>
我可以使用以下方法获取 <li>
标签的内容:
nodeset = doc.css('li')
我还可以使用以下方法获取 <a>
标签内的文本:
nodeset.each do |element|
ahref = element.css('a') // <-- <a href="http://website.com/">This is a website</a>
name = ahref.text.strip // <--This is a website
end
但是如何获取 <li>
标签中的其余文本,而不是 <a>
标签中的文本?
从这个例子中,我喜欢得到
", it belongs to John Sullivan"
我该怎么做?
我找到了一种获取其余文本的廉价方法:
ahref = element.css('a')
name = ahref.text.strip
suppl = element.text.strip.gsub(name, '')
使用 XPath 和 text()
节点测试很简单。如果您已将 li
提取到 nodeset
,您可以通过以下方式获取文本:
nodeset.xpath('./text()')
或者您可以直接从整个文档中获取:
doc.xpath('//li/text()')
这使用 text()
节点测试作为 te XPath 表达式的一部分,而不是 text
Ruby 方法。它提取 直接 节点 li
后代的任何文本节点,因此不包括 a
元素的内容。
看看这个例子:
<li><a href="http://website.com/">This is a website</a>, it belongs to John Sulliva</li>
我可以使用以下方法获取 <li>
标签的内容:
nodeset = doc.css('li')
我还可以使用以下方法获取 <a>
标签内的文本:
nodeset.each do |element|
ahref = element.css('a') // <-- <a href="http://website.com/">This is a website</a>
name = ahref.text.strip // <--This is a website
end
但是如何获取 <li>
标签中的其余文本,而不是 <a>
标签中的文本?
从这个例子中,我喜欢得到
", it belongs to John Sullivan"
我该怎么做?
我找到了一种获取其余文本的廉价方法:
ahref = element.css('a')
name = ahref.text.strip
suppl = element.text.strip.gsub(name, '')
使用 XPath 和 text()
节点测试很简单。如果您已将 li
提取到 nodeset
,您可以通过以下方式获取文本:
nodeset.xpath('./text()')
或者您可以直接从整个文档中获取:
doc.xpath('//li/text()')
这使用 text()
节点测试作为 te XPath 表达式的一部分,而不是 text
Ruby 方法。它提取 直接 节点 li
后代的任何文本节点,因此不包括 a
元素的内容。