在两个指定标签之间搜索内容

时间:2015-04-06 21:23:12

标签: ruby-on-rails ruby css-selectors nokogiri

我将Nokogiri安装到Rails项目中,它当前可以运行“Nokogiri HTML Parser Example”而没有任何问题。

我正在尝试创建一个Rails项目,该项目将解析IMDB中的电影脚本,进行字数统计,然后显示该部分中出现最多的单词。我已经确定脚本保存在“表”中:

<table width=100% border=0 cellpadding=5 class=scrtext><tr><td class=scrtext><pre><html><head></head><body>

<b>PERSON1</b>
  They say some dialogue
<b>PERSON2</b>
  They say some more

</pre></table>

我也希望排除<b>/<b>括号内的文字。

我一直在设置控制器中的上述示例,并且已经接收到URL:

#Save as a temp. file
tmp_file = open('http://www.imsdb.com/scripts/Authors-Anonymous.html')

#Parse the temp. file
doc = Nokogiri::HTML(tmp_file)

我很难理解如何设置CSS约束以获取此表。我知道它位于那些<pre>/<pre>标签之间,我已经遵循了一些教程,但我仍然不明白如何设置这些约束。

我觉得这之后的代码应该是这样的,但我不太确定:

 doc.search("//pre")

如何设置Nokogiri的CSS约束以在<pre></pre>这两个标记之间提取内容,然后过滤掉输出中会出现的<b></b>之类的无关标签?

2 个答案:

答案 0 :(得分:1)

您可以使用css方法选择器:doc.css('pre b'),它会获取每个<b>标记内的每个<pre>标记:

doc.css('pre b').each do |b_tag|
  # b_tag will be a String containg like `<b>this text is bold</b>`
end

答案 1 :(得分:0)

它可能不是最优雅的解决方案,但它为我做了诀窍。

在控制器中,我定义了以下内容:`

  def index
    page = [THE_URL]
    doc = Nokogiri::HTML(open(page))
    @content = doc.css('b').remove
    @content = doc.css('pre')
    puts @content
  end

然后在视图中;

  <%=@content %>