SlideShare una empresa de Scribd logo
1 de 24
Descargar para leer sin conexión
第1回Webスクレイピング勉強会@東京 
! 
Rubyで始める 
Webスクレイピング 
2014年6月22日 
@dkfj 佐々木拓郎
今日は大阪から来ました
今日は大阪から来ました
✦ プロフィール 
‣ Webシステムを得意とするSIerで勤務 
‣ 最近の仕事はAWS事業の推進・インフラチームのマネジメント 
‣ Webスクレイピングして、データマイニングするのが趣味 
★ ソーシャル・ネットワーク 
‣ blog: http://blog.takuros.net/ 
‣ twitter: @dkfj 
‣ Facebook: takuro.sasaki 
‣ SlideShare: http://www.slideshare.net/takurosasaki/ 
@dkfj 
自己紹介: 佐々木拓郎
宣伝!! 
Rubyのクローラー本を書いています。 
8月頃に発売予定です。しました。 
Rubyによるクローラー開発技法 
巡回・解析機能の実装と21の運用例 
http://amzn.to/1lsJ5id
Rubyで 
Webスクレイピングするには?
RubyでWebスクレイピング 
• Open-URI 
• Nokogiri 
• Anemone 
• Capybara+Selenium 
• cosmiccrawler 
• CocProxy
RubyでWebスクレイピング 
• Open-URI 
• Nokogiri 
• Anemone 
• Capybara+Selenium 
• cosmiccrawler 
• CocProxy 
基本的なライブラリ 
クローラー 
フレームワーク 
補助的なライブラリ
Open-URI 
• http/ftpに簡単にアクセスするためのライブラリ 
• Kernel#openを再定義 
• ファイルのopenと同様に、URLを扱える 
require 'open-uri' 
open("http://www.ruby-lang.org/") {|f| 
f.each_line {|line| p line} 
}
• HTML/XMLの構文解析器(パーサー) 
• ほぼデファクトスタンダード 
• XPath or CSSセレクタで、HTML中の要素を選択 
• UTF-8以外の文字コードを扱う場合は注意 
require 'nokogiri' 
require 'open-uri' 
! 
doc = Nokogiri.HTML(open("http://nokogiri.org/")) 
doc.css('a').each do |element| 
puts element[:href] 
end 
参照:Ruby製の構文解析ツール、Nokogiriの使い方 with Xpath 
http://blog.takuros.net/entry/2014/04/15/070434
• Ruby製のクローラーフレームワーク 
• データ収集/解析/保存の全ての機能がある 
• 2年ほどメンテナンスされていない 
• ScrapyのあるPythonがうらやましい今日この頃 
require 'anemone' 
! 
Anemone.crawl("http://www.hatena.ne.jp/") do |anemone| 
anemone.on_every_page do |page| 
puts page.url 
puts page.doc.xpath("//head/title/text()").first.to_s if page.doc 
end 
end 
Anemone 
参照:オープンソースのRubyのWebクローラー"Anemone"を使ってみる 
http://blog.takuros.net/entry/20110204/1296781291
Capybara+Selenium 
• 基本的には、UIテストツール 
• ブラウザを使うので、JavaScriptにも対応可能 
• スクレイピング部分は、Nokogiriを利用 
• CapybaraをラッパーしたMasqueというクローラー 
• ブラウザ代わりに、PhantomJSを使うのもあり 
参照:JavaScriptにも対応出来るruby製のクローラー、Masqueを試してみる 
http://blog.takuros.net/entry/20131223/1387814711 
参照:Capybara-DSLのはなし 
http://blog.takuros.net/entry/20140322/1395464375
cosmicrawler 
• 並列処理を得意とするクローラー 
• 並列処理の実装は、EventMachine 
• EventMachineの面倒くさい処理を隠蔽してくれる 
require 'cosmicrawler' 
! 
Cosmicrawler.http_crawl(%w(http://b.hatena.ne.jp/hotentry/it http:// 
b.hatena.ne.jp/hotentry/life)) {|request| 
get = request.get 
puts get.response if get.response_header.status == 200 
} 
参照:複数並行可能なRubyのクローラー、「cosmicrawler」を試してみた 
http://blog.takuros.net/entry/20140103/1388701372
CocProxy 
• ほぼピュアRubyで実装されたプロキシサーバ 
• 開発用途で、クローラー作成時に便利 
• 訪問済みのサイトをキャッシュしてくれる 
• 訪問先サイトに無駄に負荷を掛けずに試行錯誤できる 
参照:開発用プロキシ、「CocProxy」が便利 
http://blog.takuros.net/entry/2014/05/05/120747
スクレイピングの例
iTunesStoreのランキング 
• iTunesStoreのランキングの実体はHTML+JSON 
• UserAgentを”iTunes”にすればスクレイピング可能 
• 国ごとのコードをX-Apple-Store-Frontで指定 
• カテゴリIDとランキング種別は、引数で指定 
参照:iTunesのランキングを毎日自動で取得する その1 
http://blog.takuros.net/entry/20120521/1337549653
APIの活用 
• Webスクレイピングの目的は、データの収集 
• APIが提供されているのであれば、そちらが効率的 
• ただし、APIは制約が多い 
!
Google Maps APIの活用 
• 1IP辺り1日2,500回のリクエスト制限 
• 郵便番号(12万件)を、経度緯度に変換したい 
• 120,000件/2,500回 ⇒ 48日 
• AWSを利用して50台のサーバを使い1時間で完了 
! 
AWSでスポットインスタンスの活用 
$0.0031×50台≒約16円
Twitter Streaming API 
• 全Tweetのうち、数%だけに絞って提供されている 
• それでも1日100万件近い分量 
• 日本語のみ取り出すことも可能 
! 
参照:Rubyのtwitterライブラリで、Twitter Streaming APIが扱えるようになっていた 
http://blog.takuros.net/entry/2014/05/19/002326
引越にも 
• 参加表明後に、突然の異動の辞令 
• 7月から東京勤務 
• 相場観がないので、賃貸サイトをスクレイピング 
• 数十万件のデータから、駅ごとの㎡辺り単価の算出 
! 
GeoFUSEで視覚化しようとしたが 
時間がなくて断念
ご清聴ありがとうございました 
後日の質問は、@dkfjまで

Más contenido relacionado

La actualidad más candente

「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
Yusuke Wada
 
20150207 サービス紹介編 Amazon Simple Queue Service (SQS)
20150207 サービス紹介編 Amazon Simple Queue Service (SQS)20150207 サービス紹介編 Amazon Simple Queue Service (SQS)
20150207 サービス紹介編 Amazon Simple Queue Service (SQS)
Koichiro Nishijima
 
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
AimingStudy
 
Jawsug osaka10 service&regions
Jawsug osaka10 service&regionsJawsug osaka10 service&regions
Jawsug osaka10 service&regions
Takuro Sasaki
 

La actualidad más candente (20)

Reactjs
ReactjsReactjs
Reactjs
 
JAWS-UG初心者支部 AWS書籍活用術
JAWS-UG初心者支部 AWS書籍活用術JAWS-UG初心者支部 AWS書籍活用術
JAWS-UG初心者支部 AWS書籍活用術
 
Crawler Commons
Crawler CommonsCrawler Commons
Crawler Commons
 
JAWSUG Osaka S3 CloudSearch
JAWSUG Osaka S3 CloudSearchJAWSUG Osaka S3 CloudSearch
JAWSUG Osaka S3 CloudSearch
 
「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺「新しい」を生み出すためのWebアプリ開発とその周辺
「新しい」を生み出すためのWebアプリ開発とその周辺
 
20150207 elastic loadbalancer
20150207 elastic loadbalancer20150207 elastic loadbalancer
20150207 elastic loadbalancer
 
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
Node.jsとAWS入門(Elastic Beanstalk & AWS SDK for Node.js)
 
jQueryを中心としたJavaScript
jQueryを中心としたJavaScriptjQueryを中心としたJavaScript
jQueryを中心としたJavaScript
 
20150207 サービス紹介編 Amazon Simple Queue Service (SQS)
20150207 サービス紹介編 Amazon Simple Queue Service (SQS)20150207 サービス紹介編 Amazon Simple Queue Service (SQS)
20150207 サービス紹介編 Amazon Simple Queue Service (SQS)
 
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術
 
DevLove Kansai AWS
DevLove Kansai AWSDevLove Kansai AWS
DevLove Kansai AWS
 
Node.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript FrameworkNode.jsで始める Modern JavaScript Framework
Node.jsで始める Modern JavaScript Framework
 
Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築Node.jsではじめるサーバ構築
Node.jsではじめるサーバ構築
 
JAWSUG初心者支部 AWSの勉強の仕方
JAWSUG初心者支部 AWSの勉強の仕方JAWSUG初心者支部 AWSの勉強の仕方
JAWSUG初心者支部 AWSの勉強の仕方
 
Jawsug osaka10 service&regions
Jawsug osaka10 service&regionsJawsug osaka10 service&regions
Jawsug osaka10 service&regions
 
Node js 入門
Node js 入門Node js 入門
Node js 入門
 
Jaws ug shimane-1
Jaws ug shimane-1Jaws ug shimane-1
Jaws ug shimane-1
 
Node.js で Web アプリ開発
Node.js で Web アプリ開発Node.js で Web アプリ開発
Node.js で Web アプリ開発
 
Hello, Node.js
Hello, Node.jsHello, Node.js
Hello, Node.js
 
MySQL Fabricつらい
MySQL FabricつらいMySQL Fabricつらい
MySQL Fabricつらい
 

Destacado (7)

ScrapyとPhantomJSを用いたスクレイピングDSL
ScrapyとPhantomJSを用いたスクレイピングDSLScrapyとPhantomJSを用いたスクレイピングDSL
ScrapyとPhantomJSを用いたスクレイピングDSL
 
CasperJSを使って任意のWebサイトを電子書籍化する方法
CasperJSを使って任意のWebサイトを電子書籍化する方法CasperJSを使って任意のWebサイトを電子書籍化する方法
CasperJSを使って任意のWebサイトを電子書籍化する方法
 
オープンデータのためのスクレイピング
オープンデータのためのスクレイピングオープンデータのためのスクレイピング
オープンデータのためのスクレイピング
 
Crawler for Non engineer
Crawler for Non engineerCrawler for Non engineer
Crawler for Non engineer
 
20141022 リサーチ向け・ブラウザだけでスクレイピング(浅野)
20141022 リサーチ向け・ブラウザだけでスクレイピング(浅野) 20141022 リサーチ向け・ブラウザだけでスクレイピング(浅野)
20141022 リサーチ向け・ブラウザだけでスクレイピング(浅野)
 
クローリングしにくいものに挑戦 公開用
クローリングしにくいものに挑戦 公開用クローリングしにくいものに挑戦 公開用
クローリングしにくいものに挑戦 公開用
 
続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門続Pythonによるwebスクレイピング入門
続Pythonによるwebスクレイピング入門
 

Similar a Rubyで始めるWebスクレイピング

JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発
Yoichi Toyota
 
第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料
tantack
 

Similar a Rubyで始めるWebスクレイピング (20)

capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
 
Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門Mojoliciousでつくる! Webアプリ入門
Mojoliciousでつくる! Webアプリ入門
 
JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発JasmineによるJavascriptテスト駆動開発
JasmineによるJavascriptテスト駆動開発
 
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
 
Web制作勉強会 #2
Web制作勉強会 #2Web制作勉強会 #2
Web制作勉強会 #2
 
Javaな人が気を付けるべきJavaScriptコーディングスタイル
Javaな人が気を付けるべきJavaScriptコーディングスタイルJavaな人が気を付けるべきJavaScriptコーディングスタイル
Javaな人が気を付けるべきJavaScriptコーディングスタイル
 
はじめよう Backbone.js
はじめよう Backbone.jsはじめよう Backbone.js
はじめよう Backbone.js
 
第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料第1回名古屋Android勉強会Lt用資料
第1回名古屋Android勉強会Lt用資料
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン 【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン
【テックリンク】平日の夜1時間で学ぶ!RubyonRails初心者ハンズオン
 
「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方「Webサービスのつくり方」 のつくり方
「Webサービスのつくり方」 のつくり方
 
SwaggerとAPIのデザイン
SwaggerとAPIのデザインSwaggerとAPIのデザイン
SwaggerとAPIのデザイン
 
実戦Scala
実戦Scala実戦Scala
実戦Scala
 
Skinny Framework で始めた Scala
Skinny Framework で始めた ScalaSkinny Framework で始めた Scala
Skinny Framework で始めた Scala
 
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevioいるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
いるけどないからつくってみたよ高速モバイルプッシュ配信くん #cmdevio
 
Juzu Frameworkを使ってみた @第四回 渋谷java
Juzu Frameworkを使ってみた @第四回 渋谷javaJuzu Frameworkを使ってみた @第四回 渋谷java
Juzu Frameworkを使ってみた @第四回 渋谷java
 
AWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピングAWS Lambdaで作るクローラー/スクレイピング
AWS Lambdaで作るクローラー/スクレイピング
 
HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例HerokuでRails3.2 we love herokuの事例
HerokuでRails3.2 we love herokuの事例
 
Nodeにしましょう
NodeにしましょうNodeにしましょう
Nodeにしましょう
 
Railsのフロントエンド開発を考える
Railsのフロントエンド開発を考えるRailsのフロントエンド開発を考える
Railsのフロントエンド開発を考える
 

Más de Takuro Sasaki

開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
Takuro Sasaki
 

Más de Takuro Sasaki (11)

Lambda認証認可パターン
Lambda認証認可パターンLambda認証認可パターン
Lambda認証認可パターン
 
Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発
 
Jawsug chiba API Gateway
Jawsug chiba API GatewayJawsug chiba API Gateway
Jawsug chiba API Gateway
 
JAWSUG Kansai Simple Workflow Service (SWF)
JAWSUG Kansai Simple Workflow Service (SWF)JAWSUG Kansai Simple Workflow Service (SWF)
JAWSUG Kansai Simple Workflow Service (SWF)
 
サイト/ブログから本文抽出する方法
サイト/ブログから本文抽出する方法サイト/ブログから本文抽出する方法
サイト/ブログから本文抽出する方法
 
JAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIP
JAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIPJAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIP
JAWS-UG三都物語2014 初心者向け Elasticity ELB/AutoScaling/EIP
 
第9回Jawsug大阪 ServiceProviders 現場で使えるAWS付随サービス!!
第9回Jawsug大阪 ServiceProviders 現場で使えるAWS付随サービス!!第9回Jawsug大阪 ServiceProviders 現場で使えるAWS付随サービス!!
第9回Jawsug大阪 ServiceProviders 現場で使えるAWS付随サービス!!
 
第2回 JAWS−UG 神戸 開発運用の現場でのChef活用
第2回 JAWS−UG 神戸  開発運用の現場でのChef活用第2回 JAWS−UG 神戸  開発運用の現場でのChef活用
第2回 JAWS−UG 神戸 開発運用の現場でのChef活用
 
第8回JAWSUG大阪 JAWSUG大阪 連携サービス(SNS,SQS,SES)
第8回JAWSUG大阪 JAWSUG大阪 連携サービス(SNS,SQS,SES)第8回JAWSUG大阪 JAWSUG大阪 連携サービス(SNS,SQS,SES)
第8回JAWSUG大阪 JAWSUG大阪 連携サービス(SNS,SQS,SES)
 
第8回JAWSUG大阪 AWSの事例/課金について
第8回JAWSUG大阪 AWSの事例/課金について第8回JAWSUG大阪 AWSの事例/課金について
第8回JAWSUG大阪 AWSの事例/課金について
 
開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
開発環境としてのAwsを真面目に考える jawsug2013三都物語公開用
 

Último

Último (7)

LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 

Rubyで始めるWebスクレイピング