机械化Ruby直接在Tag中获取文本

时间:2018-01-14 21:00:49

标签: ruby mechanize

我有一些看起来像这样的HTML

<tr>
  What I want
  <b>
    What I don't want
  </b>
<tr>

获取文本的代码是

my_row = page.search('tr').first

puts my_row.text

这个问题是输出What I wantWhat I don't Want

如何直接在所选标签内提取文本而不提取任何子元素中的文本?

3 个答案:

答案 0 :(得分:1)

我认为您可以访问tr代码,然后访问b子代码并将其删除,这样您就可以获得“主要”内容:

require 'nokogiri'

data = <<-HTML
<tr>
  What I want
  <b>
    What I don't want
  </b>
<tr>
HTML


doc = Nokogiri::HTML.parse(data)
tr = doc.css('tr')
tr.css('b').remove
p tr.text
# "\n  What I want\n  \n\n"

您可以使用String#strip来获取没有换行符的文字。

答案 1 :(得分:0)

你会想要使用像Nokogiri这样的东西来解析HTML。

https://github.com/sparklemotion/nokogiri

require 'nokogiri'

html = "<tr>
  What I want
  <b>
    What I don't want
  </b>
<tr>"

doc = Nokogiri::HTML(html)
text = doc.search('tr').xpath('text()')

puts text.text  # What I want

答案 2 :(得分:0)

我为此使用了孩子:

doc.at('tr').child.text