伙计们,我正在做一个网络解析器,这很好,但我看到<head>
中的一些单词把一切都搞砸了(<strong>
在正文中也是如此)。我的代码是在 nokogiri 之前的代码,但我是 ruby 编程的新手,几个小时前才开始了解 Nokogiri。
我希望有人能帮助我完成这项工作。我需要.read URL,删除<head>
和其中的所有内容,并扫描页面其余部分的单词
PS:可以只带身体阅读吗?会更容易PSS:关于<strong>
标签,很难删除吗?
我的练习是计算页面中有多少特定单词,而不是源代码,这就是为什么我只需要抓取正文并消除标签的原因
真的希望有人能帮助我>.<谢谢伙计们!>
这是我的实际故障代码/纯原件在这里
require 'open-uri'
require 'cgi'
require 'nokogiri'
class Counter
def initialize(url)
@url = url
end
def decapitate
Nokogiri::HTML(url)
url.css('head').remove.to_s
end
def scan(word)
url.scan(word)
end
end
url, word = ARGV
puts "Found #{Counter.new(url).open.decapitate.scan(word).length} maches."
那里有很多错误。
-
decapitate
中的url
是一个未定义的局部变量。您需要使用@url
. -
Nokogiri::HTML
需要IO
对象或字符串,而不是 URL。您可能想使用open(@url)
来读取 URL 内容(我假设,因为您需要open-uri
-
Nokogiri::HTML
返回一个文档,但您不将此返回值存储在任何位置 -
因此,
url
(或者更确切地说是@url
)将是一个字符串,字符串没有css
方法;您希望改为将css
应用于文档 -
remove
将返回已删除的节点;作为方法中的最后一项,这将是返回的内容。因此decapitate
将返回head
节点的文本。 -
最后,
...decapitate.scan
将调用String#scan
方法,而不是您定义的方法。
您可以按如下方式执行所需的操作:
def count(pattern, url)
doc = Nokogiri::HTML(open(url))
doc.css('head').remove
doc.text.scan(pattern).size
end