Ich möchte einen Shop mit Ruby, Nokogiri und Mechanize crawlen.So vermeiden Sie doppelte Einträge beim Crawlen einer Site
Auf einer Seite mit zwei Artikel gezeigt, weiß ich, dass alle Artikel mit .../p/...
in der Adresse beginnen, so dass ich dies in article_links
speichern. Alle /p/
Links sollten angezeigt werden.
Normalerweise würde ich zwei Adressen siehe:
agent = Mechanize.new
page = agent.get(exampleshop.com)
article_links = page.links_with(href: %r{.*/p/})
article_links.map do |link|
article = link.click
target_URL = page.uri + link.uri #full URL
puts "#{target_URL}"
end
#crawling stuff on /p/ pages not included here
jedoch am Ende jeder Verbindung dupliziert, die bereits vor der Schleife passiert, so dass ich zu sehen bekommen:
exampleshop.com/p/productxy.html
exampleshop.com/p/productxy.html
exampleshop.com/p/productab.html
exampleshop.com/p/productab.html
Ich glaube, dass es für jedes Produkt im Code der Site zwei hrefs mit /p/
gibt. Gibt es einen guten Weg, dies zu verhindern? Oder ist es möglich, Nokogiri CSS in links_with
zu verwenden?
Es ist schwierig, das Problem ohne HTML-Beispiel zu duplizieren. Siehe "[mcve]". 'map' ist der falsche Iterator dafür. Sie sollten 'each' verwenden, wenn Sie keinen modifizierten Wert zuweisen müssen, während Sie über 'article_links' laufen. 'map' wird die gleichen Dinge zurückgeben, die' target_URL' zugewiesen sind. Je nachdem, wie dieses Code-Snippet verwendet wird, kann es zu doppelten Informationen kommen. –