2017-06-06 6 views
-1
class ScraperController < ApplicationController 

def show 
    mechanize = Mechanize.new 

    website = mechanize.get('https://website.com/') 
    $max = 2 
    $counter = 0 
    $link_to_click = 2 

    @names = [] 

    while $counter <= $max do 
    @names.push(website.css('.memName').text.strip) 
    website.link_with(:text => '2').text.strip.click 
    $link_to_click += 1 
    $counter += 1 
    end 
end 
end 

Ich versuche 20 Artikel abkratzen jeder Seite und dann unten auf den Link klicken (1, 2, 3, 4, 5 usw.). Allerdings erhalte ich den Fehler, wie ich im Titel sehe, der mir sagt, dass ich nicht auf die Zeichenfolge klicken kann. Es erkennt also, dass der Button "2" existiert, sagt mir aber, ob ich nicht darauf klicken kann. Im Idealfall wollte ich nach der Sortierung die Variable $ link_to_click verwenden, um die "2" zu ersetzen, so dass sie jedes Mal erhöht wird, aber immer als Null zurückkommt. Ich habe es auch zu .to_s mit dem gleichen Ergebnis geändert.nicht definierte Methode SiehöreneinKlicken für ‚2‘: String, Rails Fehler bei der Verwendung von Mechanize

Wenn ich den Klick alle zusammen entferne, wird es die gleiche Seite 3 Mal schaben, anstatt auf die nächste Seite zu gehen. Ich habe auch den text.strip Teil vor dem .click entfernt und es wird dasselbe tun. Ich habe viele Varianten ausprobiert, aber kein Glück gehabt.

Ich würde wirklich jeden Rat, den Sie anbieten könnten, schätzen.

+1

(1) Warum sind Sie Globals verwenden? (2) 'String # strip' gibt einen String zurück und string's haben keine 'click' Methoden, was erwarten Sie' website.link_with (: text =>' 2 '). Text.strip.click' zu tun? –

+0

@muistooshort Ich habe beide ausprobiert (aus Verzweiflung, die nie gut ist), wenn ich diese website.link_with (: text => $ link_to_click) .click' oder 'website.link_with (: text => 2) .click mache 'Ergebnis in der Fehler _undefined Methode' klicken Sie auf 'für Nil: NilClass_ – Brandon

+0

Das sagt Ihnen, dass es nicht den Link finden Sie suchen, richtig? –

Antwort

1

Ich beendete die Überprüfung der Artikel, die ich referenzierte, um dies zu lösen und kam zu dieser Schlussfolgerung.

Ich änderte den website_link zu website = website.link_with(:text => $link_to_click.to_s).click (weil es nur als String funktionierte) und es druckte die erste Seite, die zweite Seite und jede danach aus.

Dies sind die Artikel, die ich verweise, um zu lernen, wie man das macht.

http://docs.seattlerb.org/mechanize/GUIDE_rdoc.html

und

https://readysteadycode.com/howto-scrape-websites-with-ruby-and-mechanize

Verwandte Themen