我正在用一个动态网站做一个网页抓取,这个动态网站有一个“加载更多”按钮。虽然我通过使用while循环来解决负载更多的问题。当我试图刮取数据时,它还面临着另一个挑战--它一直在成倍增长。所以第一批数据是24个数据,当我刮第二批数据的时候,它也会刮第一批数据,所以它刮了48个数据,只添加了24个新的数据。
这是我的密码。
require "selenium-webdriver"
driver = Selenium::WebDriver.for :chrome
url ="https://www.example.com/categories/car-parts"
driver.navigate.to "#{url}"
wait = Selenium::WebDriver::Wait.new(:timeout => 20)
while driver.page_source.include? "Load more"
load_more = wait.until {
load_more_element = driver.find_element(css: ".styles__loadMore___yYAF4")
}
sleep 3
load_more.click()
puts "load_more"
sleep 3
seller_url = wait.until {
element = driver.find_elements(:css, ".desktop__itemOneFourth___2t71A .styles__link___9msaS:nth-child(1)")
}
seller_url.each do |line|
seller_uri = line.attribute("href")
seller_hand = seller_uri[/https:\/\/www.example.com(.*\/([.\w+]+))/i]
seller_handle = seller_hand.gsub("https://www.example.com/", "")
seller = Seller.new
seller.seller_url = seller_uri
seller.seller_handle = seller_handle
seller.save
puts seller_handle
end
puts seller_url.size
sleep 3我想要的是继续加载,但是我想刮掉最后一个加载的批,减去前一个批。
发布于 2019-11-17 17:25:33
您知道每次单击loaded按钮时加载多少条记录,这样您就可以轻松地访问seller_url数组中的新记录:
items_per_page = 24
while driver.page_source.include? "Load more"
# ...
seller_url = wait.until {
element = driver.find_elements(:css, ".desktop__itemOneFourth___2t71A .styles__link___9msaS:nth-child(1)")
}
seller_url.last(items_per_page).each do |line|
# do stuff
end
pages_loaded += 1
endhttps://stackoverflow.com/questions/58902681
复制相似问题