capybaraとnokogiriを使ってクローラーを作る練習をしているのですが、
capybaraでvisitした該当ページのhtmlを取得したいのですが、ajaxが使われているようで、各画像が読み込まれるごとに、すでに読み込まれている画像がhtmlから消えてしまう挙動になっているようです。
(<div class="Nnq7C weEfm">...</div>に画像が入ってるのですが、新しい<div class="Nnq7C weEfm">...</div>を読み込むと、先頭の<div class="Nnq7C weEfm">...</div>がhtmlから消えてしまいます)
以下のコードのようにやると、消えていない部分のhtmlはnokogiriでparseできたのですがajaxの部分がうまく行きません。
どのようにしたらいいのでしょうか?
require 'nokogiri' require 'open-uri' require 'capybara' require 'capybara/dsl' require 'selenium-webdriver' class Insta include Capybara::DSL def login Capybara.current_driver = :selenium # Capybara.app_host = "https://paiza.jp/" Capybara.default_max_wait_time = 100 visit('https://www.instagram.com/renamatui27/?hl=ja') doc = Nokogiri::HTML.parse(page.html) doc.xpath('//*[@id="react-root"]/section/main/div/div[2]/article/div[1]/div/div').each do |node| node.xpath('div').each do |n| url = n.xpath('a/div/div[1]/img').attribute('src') visit("#{url}") sleep(2) end end end end crawler = Insta.new crawler.login
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。