わからないこと
現在Rubyのクローラー作成において検索結果を10件取得するのを当面の目標にしていましてその方法が知りたく質問させて頂きました
まずはコードを載せます
class Search def scraping(keyword) submit_keyword(keyword) # ここで30件取得させたい @agent.page.search('div.g').map do |node| title = node.search('a') next if title.empty? query = URI.decode_www_form(URI(title.attr("href")).query) url = query[0][1] snipped = node.search('div.s > span.st') next if snipped.empty? || snipped.children.empty? { url: url, title: expect_tag(title.children.to_html), } end.reject do |list| list.nil? end end private def submit_keyword(keyword) @agent = Mechanize.new @agent.user_agent_alias = USER_AGENT @agent.get('https://www.google.co.jp/') @agent.page.form_with(name: 'f') do |form| form.q = keyword end.submit end def expect_tag(string) string.gsub(/(<b>|</b>|<br>|</br>|\R)/, '') end end CSV.open('math.csv', 'w') do |rank| rank << ["Keyword","Rank","Title","URL"] end File.open('keyword.txt') do |file| file.each_line do |line| keyword = line result = GoogleSearch.new.scraping(keyword) result.each_with_index do |value, i| puts "----------------------------------------------------------------------------------------------------" puts "Keyword : #{keyword}" puts "Rank : #{i+1}" puts "URL : #{value[:url]}" puts "Title : #{value[:title]}" puts "----------------------------------------------------------------------------------------------------" CSV.open('math.csv', 'a') do |rank| rank << ["#{keyword}","#{i+1}","#{value[:title]}","#{value[:url]}"] end end end end
このコードで検索結果も取得まではできているのですが10件をちゃんと撮れないキーワードの時もありましておそらくURLで次のページにとばいいのでしょうがその方法がうまくわかっていないです。
参考試したもの
https://tanuhack.com/python/google-scraping/
この記事を見てコードを書いてみましたがうまくできず他に何か参考になるようなサイトや方法ご存知でしたらご教授いただけないでしょうか?
追記
https://teratail.com/questions/187572
こちらの質問投稿で30件取得ができるようにはなったのですが取得された結果がgoogleのブラウザでの正確な結果とは違ったものが出てきている為に別の方法で取得できないかと思案しております
具体的には検索のキーワードによって1ページ目で取得できる件数が違ったりするので次のURLに対してアクセスしてきっちり10件取得できるようにしたいと思っております。
例(Rubyの際は10件取得できているがルイヴィトンの際は6件しか取得できてないなど)
回答1件
あなたの回答
tips
プレビュー