【问题标题】:Searching for contents between two specified tags在两个指定标签之间搜索内容
【发布时间】:2015-06-11 08:41:06
【问题描述】:

我将 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>

我也想排除 &lt;b&gt;/&lt;b&gt; 括号内的文本。

我已经在控制器中像上面的示例一样进行了设置,并且已经获取了 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 约束来获取此表。我知道它在&lt;pre&gt;/&lt;pre&gt; 标签之间,我已经为此学习了许多教程,但我仍然不明白如何设置这些约束。

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

 doc.search("//pre")

如何设置 Nokogiri 的 CSS 约束来拉取两个标签(例如 &lt;pre&gt;&lt;/pre&gt;)之间的内容,然后过滤掉输出中会出现的不相关标签(例如 &lt;b&gt;&lt;/b&gt;)?

【问题讨论】:

  • 您可以使用css 方法选择器:doc.css('pre b'),它将在每个&lt;pre&gt; 标签中获取每个&lt;b&gt; 标签
  • 另外作为补充(因为我无法发布更多链接),我一直在看 Nokogiri 网站上的教程 (nokogiri.org/tutorials/…) 和各种 StackOverflow 问题 (stackoverflow.com/questions/12478272/…),但是设置这个我仍然很困惑。
  • 欢迎您 - 您应该在答案部分而不是问题中发布您的答案。也无需将问题标记为已解决,因为接受答案就是这样做的。
  • 但仅发布您的答案如果它是您选择的答案。

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


【解决方案1】:

您可以使用css 方法选择器:doc.css('pre b'),它将在每个&lt;pre&gt; 标记中获取每个&lt;b&gt; 标记:

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

【讨论】:

【解决方案2】:

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

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

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

然后在视图中;

  <%=@content %>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多