删除<head>问题,我需要指导/帮助



伙计们,我正在做一个网络解析器,这很好,但我看到<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

最新更新