質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

2207閲覧

google検索結果を30件取得したい

yuzujoe

総合スコア49

スクレイピング

スクレイピングとは、公開されているWebサイトからページ内の情報を抽出する技術です。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

1グッド

2クリップ

投稿2019/05/03 10:01

やりたいこと

https://teratail.com/questions/187243
こちらに引き続いての質問になります。

検索結果を取得することはできたのですが次の課題として30件分取得することを試みています
他の言語ので実装されている記事は見つけたので参考にはしていたのですが(以下の記事です)
https://teratail.com/questions/167373

該当コードに関しては以下の通りです

def scraping(keyword) submit_keyword(keyword) @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), snipped: expect_tag(snipped.children.to_html) } end.reject do |list| list.nil? end end private def submit_keyword(keyword) @agent = Mechanize.new @agent.user_agent_alias = 'Linux Mozilla' @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

@agent.getの部分で要素を確定させようと思いまして上記の記事を参考にしたのですがいい結果は得られずでして何かいい記事等ご存知でしたらご教授いただけますと幸いです。
よろしくお願い致します

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

30件分の検索結果(タイトル)を表示するプログラム。

ruby

1require 'open-uri' 2require 'nokogiri' 3require 'cgi' 4 5USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/' 6 + '537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36' 7url_base = 'https://www.google.com/search?q=' 8referer = 'https://www.google.com/' 9 10search_word = CGI.escape('青空文庫') 11 123.times do |i| 13 search_url = (url_base + search_word) 14 15 unless i.zero? 16 search_url += "&ei=123&start=#{i * 10}" 17 end 18 19 doc = Nokogiri::HTML.parse(open(search_url, {'User-Agent' => USER_AGENT, 'Referer' => referer})) 20 21 doc.xpath('//h3[@class="r"]').each do |h3| 22 puts "タイトル:" + h3.text 23 url = CGI.unescape(CGI.unescapeHTML(h3.xpath('a/@href').text)) 24 puts "URL:" + url.split('&sa=U&ved=').first.sub('/url?q=', '') 25 end 26 27 sleep(rand(5..10)) 28 29 referer = search_url 30end 31

投稿2019/05/03 12:11

編集2019/05/04 08:04
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuzujoe

2019/05/04 05:04

ありがとうございます。 URLも取得したい際はxpathに指定する形で間違ってないでしょうか?
退会済みユーザー

退会済みユーザー

2019/05/04 08:05

URLも取得できるようにしました。おっしゃるようにxpathを指定する形でOKです。
yuzujoe

2019/05/04 08:31

ありがとうございます。 参考にして自分のプログラムで取得できるようになりました。 ありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問