Ich habe eine Shop-Seite und möchte alle Artikel als Link zuerst sehen. Danach möchte ich den Inhalt jedes Links crawlen. Ich erhalte die Links wie folge:Mechanize page.search funktioniert nicht mit link.click-Methode
agent = Mechanize.new
page = agent.get(page_URL)
article_links = page.search('div.sklep-produkt h3 a').attr('href')
Ich verwende Suche mit CSS, da es der einfachste Weg für mich ist für einen genauen Tag oder einen Bereich zu suchen. Wenn ich eine puts "#{article_links}"
stelle, kann ich bereits einen Link sehen, also funktioniert es. Allerdings möchte ich mehr als einen Link - alle Artikel Links - von der Seite so verwende ich diese:
article_links.uniq { |link| link.uri }.map do |link| #no double entries
link.click
target_URL = page.uri + link.uri
puts "#{target_URL}"
end
Das Problem ist, dass Methoden wie uniq, Karte, link.click, uri und so weiter don‘ t arbeiten mit page.search. Beispiel Fehler:
undefined method `uri' for #<Nokogiri::XML::Attr:0x0055a7a4a7e440> (NoMethodError)
Es ist nur möglich mit page.links_with(...)
. Wie crawle ich mehrere Links mit page.search
? wie
haben Sie versucht, die Links in einem Array zu speichern und dann mit einem 'agent.get' auf jedem Link zu iterieren, etwas wie' links_array.each {| link | agent.get link} '? Ich denke du kannst auch einen Block zum '.get' hinzufügen. Ich habe Mechanize ausprobiert und stattdessen Watir viel einfacher umgestellt, damit Mechanize kaum noch kennt. – mjwatts