删除问题,我需要指导/协助

时间:2017-01-31 01:02:17

标签: ruby parsing rubygems html-parsing nokogiri

所以小伙子们,我做了一个网络解析器,这很好,但我看到<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."

1 个答案:

答案 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