所以小伙子们,我做了一个网络解析器,这很好,但我看到<head>
里面的一些词语搞砸了所有东西(而<strong>
也在身体里面)。我的代码是This one here before nokogiri,但我是ruby编程的新手,几小时前才开始了解Nokogiri。
我希望有人能帮助我完成这项工作。我需要。读取网址,删除<head>
及其中的所有内容,然后在页面的其余部分扫描文字
PS:是否有可能带上身体并阅读它?这会更容易
PSS:关于<strong>
标签,是否很难将其删除?
我的练习计算页面中有多少特定词,而不是源代码,这就是为什么我只需要抓住身体并删除标签
真的希望有人可以帮助我&gt;。&lt; 小伙子们!
这是我的实际失败代码/纯原文是here
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."
答案 0 :(得分:3)
那里有很多错误。
url
中的 decapitate
是未定义的局部变量。您需要使用@url
。
Nokogiri::HTML
要求IO
对象或字符串,而不是URL。您可能希望使用open(@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