Ruby selenium 検索結果の取得
解決済
回答 1
投稿
- 評価
- クリップ 0
- VIEW 755
■分からないこと
seleniumの練習でgoogle検索をして、検索結果のタイトルテキストを取得してCSVを作成するというのをやっています。
検索結果の1ページだけなら出来たのですが、検索結果数に関わらず2ページ目以降も取得する方法がわかりません。
find_elementsで取得結果のページ数だけクリックしようと思ったのですが、class名が他でも使われており指定方法も分からなかったです。
ご教授いただけますようお願い致します。
■取得したい箇所
](5477745f1ec827bfd0fb18167b7694d1.png)
require 'selenium-webdriver'
require 'byebug'
require 'csv'
def exec(driver)
elements = driver.find_elements(:class, 'LC20lb')
@value = []
if elements.size > 0
elements.each do |e|
@value << e.text
end
end
headers = ["title"]
CSV.open("google_test.csv", "a", write_headers: true) do |csv|
csv << headers
@value.each do |idx|
csv << [idx]
end
end
end
wait = Selenium::WebDriver::Wait.new(timeout: 10)
driver = Selenium::WebDriver.for :chrome
driver.navigate.to "http://google.com"
wait.until {driver.find_elements(:xpath, '//*[@id="tsf"]/div[2]/div/div[1]/div/div[1]/input')}
driver.find_element(:xpath, '//*[@id="tsf"]/div[2]/div/div[1]/div/div[1]/input').send_keys("サンプル");sleep 1
driver.find_element(:name, 'btnK').click;sleep 2
driver.find_element(:xpath, '//*[@id="nav"]/tbody/tr/td[3]/a').location_once_scrolled_into_view
exec(driver)
driver.quit
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
0
URLで検索結果の何番目を表示するか制御できそうなので。
クローラーの終了条件は考慮していない。
require 'open-uri'
require 'nokogiri'
require 'cgi'
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/'
+ '537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36'
url_base = 'https://www.google.com/search?q='
referer = 'https://www.google.com/'
search_word = CGI.escape('青空文庫')
2.times do |i|
search_url = (url_base + search_word)
unless i.zero?
search_url += "&ei=123&start=#{i * 10}"
end
doc = Nokogiri::HTML.parse(open(search_url, {'User-Agent' => USER_AGENT, 'Referer' => referer}))
doc.xpath('//h3[@class="r"]').each do |h3|
puts h3.text
end
sleep(rand(5..10))
referer = search_url
end
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2019/04/16 12:19
ありがとうございます!初めて知る方法なので勉強して実行してみます!