我将Nokogiri安装到一个Rails项目中,它目前可以毫无问题地运行"Nokogiri HTML解析器示例"。
我正在尝试创建一个 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>
?
您可以使用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 %>