2017-01-31 2 views
2

Also Leute, ich bin ein Web-Parser machen es war gut, aber ich sah, dass einige Wörter innerhalb alles zusammen (und <strong> im Körper zu). Mein Code ist This one here before nokogiri, aber ich bin neu in der Ruby-Programmierung und habe erst vor wenigen Stunden angefangen, über Nokogiri zu wissen.Entfernen <head> Probleme, ich brauche Anleitung/Hilfe

Ich wünschte, jemand könnte mir helfen, diese Arbeit zu machen. Ich muss .read die URL, entfernen und alles darin und scannen Wörter über den Rest der Seite

PS: Ist es möglich, nur den Körper zu bringen und es zu lesen? Es wäre einfacher PSS: Über <strong> Tags, ist es schwer, es zu entfernen?

Meine Übung ist zählen, wie viele especific Wort auf der Seite sind, nicht Source-Code, das ist, warum ich muss nur den Körper packen und beseitigen: Tag

Wirklich hoffe jemand mir> helfen kann. < Thnks Leute!

Hier ist meine eigentliche Fehlercode/Die reine ursprüngliche 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." 

Antwort

3

Viele Fehler gibt.

  • url in decapitate ist eine nicht definierte lokale Variable. Sie müssen @url verwenden.

  • Nokogiri::HTML erwartet entweder ein IO Objekt oder eine Zeichenfolge, keine URL. Sie wollten wahrscheinlich open(@url) verwenden, um die URL Inhalt zu lesen (ich nehme an, da Sie open-uri erforderlich

  • Nokogiri::HTML ein Dokument zurückgibt, aber Sie nicht speichern diesen Rückgabewert überall

  • Folglich url (oder eher @url) würde eine Zeichenfolge sein, und Strings haben keine css Methode, wie die letzten, man css das Dokument statt

  • remove die Knoten zurück, die entfernt wird, angewandt werden soll Ding in der Methode, das wird sein, was zurückgegeben wird. Somit würde decapitate den Text des head Knotens zurückgeben.

  • Am Ende wird ...decapitate.scan die Methode String#scan aufrufen, nicht die von Ihnen definierte Methode.

können Sie tun, was Sie wollen, wie folgt:

def count(pattern, url) 
    doc = Nokogiri::HTML(open(url)) 
    doc.css('head').remove 
    doc.text.scan(pattern).size 
end 
+0

Mit '@ url' ist wahrscheinlich besser als url' zweimal auf zwei verschiedene Methoden in' vorbei. – tadman

+0

@tadman: Oh ja, ich war wahrscheinlich nicht klar. Meine Lösung unten ist anstelle von OPs, kein Plug-in. Es ist einfach genug, um es anzupassen. Wenn es in die Klasse hineingehen würde, würde ich im Konstruktor packen, enthaupten und textifizieren, wobei "@ text" statt "@ url" gespeichert wird, so dass man mehrere Dinge auf demselben Dokument zählen kann ... – Amadan

+0

Ah, das macht Sinn, eine eigenständige Methode. – tadman