使用Nokogiri,我想获取<span>
标记之后的段落部分。
我不是正则表达英雄,在我向前迈进之前,这是我唯一需要发现的东西。列表中唯一的常量是|
符号,丑陋的方式是获取整个内容,我猜是split
和join
。希望有一种更聪明,更优雅的方式!
<ul>
<li>
<p>
<strong>I don't care about </strong>
<span>|</span>
this I do care about
</p></li> ...
</ul>
答案 0 :(得分:1)
如果您的HTML很简单,那么这将有效:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<ul>
<li>
<p>
<strong>I don't care about </strong>
<span>|</span>
this I do care about
</p></li> ...
</ul>
EOT
doc.at('p').children.last # => #<Nokogiri::XML::Text:0x3ff1995c5b00 "\nthis I do care about\n">
doc.at('p').children.last.text # => "\nthis I do care about\n"
解析HTML和XML实际上是寻找可用于找到所需内容的地标。在这种情况下,<span>
可以,但是根据这个内容获取所需的内容并不像查找一个级别那样容易,只需<p>
标记,抓取其内容即{{1}选择该列表中的最后一个节点,即包含所需文本的文本节点。
使用children
标记的原因不是我要采用的方式,如果HTML格式发生变化,<span>
与所需文本之间的节点数可能会发生变化。可以引入包含<span>
的干预文本节点来格式化源,这会弄乱简单的索引查找。要解决这个问题,代码必须忽略空白节点并找到非空白节点。
我不是正则英雄......
您不应该尝试使用HTML或XML。它们过于灵活,可能会混淆正则表达式,除非你在非常静态的HTML上进行极其琐碎的搜索,除非你正在扫描被遗弃的页面,否则这种情况在真正的互联网上不太可能。相反,学习并依赖可靠的HTML / XML解析器,这可以将页面缩减为DOM,从而可以轻松搜索和遍历标记。