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

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

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

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

Ruby

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

Q&A

解決済

2回答

1387閲覧

[Ruby]Webスクレイピングについて

ruby_11

総合スコア37

スクレイピング

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

Ruby

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

0グッド

0クリップ

投稿2017/07/21 08:09

度々質問失礼します。

Webスクレイピングにおいて、JavaScriptが作動しているHTMLから特定の情報を取得することができません。

イメージ説明

こちらのサイトの、Related Tagsという部分を抽出したいのですが、NokogiriやSeleniumやCapybaraなどいろいろ調べましたが、上手く処理することができませんでした。(知識不足で理解が困難でした。。。)

また、1つのサイトだと手動すればいいのですが、数百個のページから取得することが目的なので、Webスクレイピングすることでまとめて抽出することができないかと思いました。

サイトURLはこちらです。
https://www.ted.com/talks/adam_grant_the_surprising_habits_of_original_thinkers

また、JavaScriptが作動しているとうのは、過去の質問での回答で初めて知ったのですが、それはどこで確認することができるのでしょうか?

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

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

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

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

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

guest

回答2

0

後半だけ。
ブラウザでそのページを見て、「ページのソースを表示」のような機能で表示されたHTMLと、ブラウザの開発者ツールで表示されるHTML構造の差が、JavaScriptによって行われた変更です。

ページのソースに存在しないが、開発者ツールで見ると存在するというノードは、JavaScriptで追加された物なので、Seleniumのようなツールを使う必要があります。

前半については、自分で調べたけどわからない&どこがわからないか書いてない というケースだと聞かれた方は途方に暮れます。

投稿2017/07/21 12:21

otn

総合スコア84423

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

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

ruby_11

2017/07/22 03:35

回答ありがとうございます。 WEBスクレイピングできる形式とそうではない形式があるということを知りませんでした。
otn

2017/07/22 15:28

Seleniumのようなツールを使うとスクレイピングできますよ。そう書いたつもりですが。
guest

0

ベストアンサー

Ruby

1# encoding: utf-8 2 3require 'open-uri' 4require 'certified' 5 6url = 'https://www.ted.com/talks/adam_grant_the_surprising_habits_of_original_thinkers' 7 8data = open(url, &:read) 9 10data =~ /"tags":\[(.+?)\]}\],"/ 11 12tags = $1.split(',') 13 14puts tags.map { |e| e.gsub(/[\\|"]/, '').capitalize } 15 16=begin 17 Business 18 Creativity 19 Curiosity 20 Decision-making 21 Exploration 22 Failure 23 Innovation 24 Invention 25 Leadership 26 Motivation 27 Personal growth 28 Potential 29 Success 30 Work 31=end 32

恐らく、script内のこれだと思います。
html内にそのまま書いてあるのでSeleniumなどを
使わなくても大丈夫だと思います。
#追記
keywordでもできるかもしれません。

Ruby

1# encoding: utf-8 2 3require 'open-uri' 4require 'certified' 5 6url = 'https://www.ted.com/talks/adam_grant_the_surprising_habits_of_original_thinkers' 7 8data = open(url, &:read) 9 10data =~ /meta name="keywords" content="TED, talks,(.+?)"/ 11 12tags = $1.split(',') 13 14puts tags.map { |e| e.strip.capitalize } 15

投稿2017/07/21 09:34

編集2017/07/21 19:16
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ruby_11

2017/07/22 03:34

回答ありがとうございます。 dataからの正規表現を使うことによって、抽出することが可能なんですね。他の項目もそれらによって抽出することができました。
退会済みユーザー

退会済みユーザー

2017/07/22 06:14

おぉ、よかったですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問