Ruby、Nokogiri、Mechanizeでショップをクロールしたいと思っています。サイトをクロールする重複エントリを避ける方法
2つの記事が表示されているページでは、すべての記事がアドレスに.../p/...
で始まることがわかっているので、これをarticle_links
に保存しています。すべて/p/
のリンクが表示されます。すでにループの前に起こった、最終的には各リンクが複製され、
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
しかし、私は見ることが:
通常、私は2つのアドレスを見ることが
exampleshop.com/p/productxy.html
exampleshop.com/p/productxy.html
exampleshop.com/p/productab.html
exampleshop.com/p/productab.html
私は信じていますサイトのコードには、製品ごとに/p/
の2つの階層があることを確認してください。これを防ぐ良い方法はありますか?またはlinks_with
でNokogiri CSSを使用することは可能ですか?
サンプルHTMLなしで問題を再現するのは難しいです。 「[mcve]」を参照してください。 'map'はこれに対して間違ったイテレータです。 'article_links'をループするときに変更された値を割り当てる必要がなければ' each'を使うべきです。 'map'は' target_URL'に割り当てられたものと同じものを返すので、コードのスニペットがどのように使われているかによって情報が重複する可能性があります。 –