使用Nokogiri时如何处理 



使用Nokogiri我刮了一页,我试图找到总结果,但没有成功。

HTML片段(文档)

<div class="total_count">
    <b>Returned:</b>&nbsp;97&nbsp;results
</div>

获取总数=>97

doc.search(".total_count").text.gsub(/[^0-9]/,'') #=> 497 !Oops

如何通过&nbsp;

它返回的文本是这个

 doc.search(".total_count").text
"rn    Returned:u00A0497u00A0resultsrn"

因此使用doc.at(".total_count").text.match('d+')给出"496"

节点为

=> [#<Nokogiri::XML::Element:0x1762914 name="div" attributes=[#<Nokogiri::XML::Attr:0x1762878 name=
class" value="total_count">] children=[#<Nokogiri::XML::Text:0x1767618 "rn    ">, #<Nokogiri::XML
:Element:0x1767e1c name="b" children=[#<Nokogiri::XML::Text:0x1767a98 "Returned:">]>, #<Nokogiri::X
L::Text:0x1767834 "u00A0497u00A0resultsrn">]>]

Nokogiri,Ruby版本

C:Ruby200>nokogiri -v
DL is deprecated, please use Fiddle
# Nokogiri (1.6.0)
    ---
    warnings: []
    nokogiri: 1.6.0
    ruby:
      version: 2.0.0
      platform: i386-mingw32
      description: ruby 2.0.0p247 (2013-06-27) [i386-mingw32]
      engine: ruby
    libxml:
      binding: extension
      source: system
      compiled: 2.8.0
      loaded: 2.8.0

首先,除非您希望返回NodeSet,否则不要使用search。NodeSet的行为就像一个节点数组,所以你必须准备好对它们进行迭代,否则你可能会得到一些非常奇怪的结果。

相反,从这样的东西开始:

require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<div class="total_count">
    <b>Returned:</b>&nbsp;97&nbsp;results
</div>
EOT
doc.at('div').text.scan(/d+/) # => ["97"]
doc.at('div').text[/d+/] # => "97"

CCD_ 4返回与选择器匹配的第一个节点。在这种情况下,它是<div>。我也可以使用类选择器:

doc.at('.total_count').text[/d+/] # => "97"

接下来,不要尝试使用gsub来删除您不想要的内容,而是使用正则表达式来匹配您想要的内容。我反复看到代码把这个概念弄错了,所以把它变成一句咒语。使用正则表达式时,如果要查找或捕获某个内容,请使用匹配项。如果要移除或更改内容,请使用subgsub。非常,非常,偶尔你会不得不把两者混合在一起,但这应该是一个罕见的例外。

当前版本的Nokogiri(1.6.0)使用libxml(2.8.0),在当前版本的Ruby(2.0.0)上返回<div>文本节点:

doc.at('div').text # => "n    Returned:u00A097u00A0resultsn"

没有4,所以如果您看到任何不同,那么您需要升级Ruby、Nokogiri,甚至可能升级您的libXML2。

您可以在命令行中使用nokogiri -v检查版本信息。你应该看到这样的东西:

#Nokogiri(1.6.0)---警告:[]野村:1.6.0红宝石:版本:2.0.0平台:x86_64-darwin12.4.0description:ruby 2.0.0p247(2013-06-27修订版41674)[x86_64-darwin12.4.0]引擎:rubylibxml:绑定:扩展来源:打包libxml2_path:/Users/tinman/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/nokogiri1.6.0/ports/i686-apple-darwin11/libxml2/2.8.0libxslt_path:/Users/tinman/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/nokogiri1.6.0/ports/i686-apple-darwin11/libxslt/1.1.26编译:2.8.0加载:2.8.0

相关内容

  • 没有找到相关文章

最新更新