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

Searching for contents between two specified tags

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

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

<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 约束来获取此 table。我知道它在那些 <pre>/<pre> 标签之间,我已经学习了很多教程,但我仍然不明白如何设置这些约束。

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

 doc.search("//pre")

如何设置Nokogiri的CSS约束来拉取两个标签如<pre></pre>之间的内容,然后过滤掉不相关的标签如<b></b>会出现在输出?

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

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

它可能不是最优雅的解决方案,但它对我有用。

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

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

然后在视图中;

  <%=@content %>