SlideShare una empresa de Scribd logo
1 de 26
Descargar para leer sin conexión
エンジョイ☆スクレイピング
@fmkz___
もしもそれがヒトのようにアクセス
し、ヒトのようにインターバルをと
るのなら、それはヒトである
自己紹介
•  kzfm (@fmkz___)
–  blog.kzfmix.com
–  Shizuoka.py

•  とある製薬企業の研究員
•  日本酒とdrum n bass好き
•  Python歴は6年くらい
–  (その前はPerl)

•  よく使うのはFlask, Pandas
–  最近DjangoかRoRに移ろうかなと
あるサービスのRSSをクロー
ラで定期的にチェックしてい
たのですが、
「ロボットアクセス禁止って
書いてあるだろ」ってブロッ
クされました
文化の違いって難しいですね?
シンプルなサイト
簡単
requestsを使う
•  URLを指定すると、HTMLやXMLが
返ってくるような
–  RSSや普通のウェブページ

•  requests+pyquery
•  requests+feedparser
例
•  Naverまとめからひ
たすら富士山の画像
を集める
import	
  re	
  
import	
  requests	
  
c	
  =	
  requests.get('h3p://
matome.naver.jp/odai/
2134560784352051501').content	
  
print(''.join([x.group(0)	
  for	
  x	
  in	
  
re.finditer(r'<img	
  src=".+".*?
class="MTMItemThumb".*?/>',	
  c)]))	
参考: h3p://d.hatena.ne.jp/heavenshell/20121214/1355499643
状態を持つサイト
statefulはstressful
mechanizeを使う
•  ログインしてごにょごにょする必要がある
ようなタスク
•  queryがPOSTでsearch.doとか
result.doみたいなサイト
例
•  amazonのアフィリエイトにアクセスし
て売上を(メールで確認したい)
コード(一部)
from	
  mechanize	
  import	
  Browser	
  
from	
  pyquery	
  import	
  PyQuery	
  as	
  pq	
  
br	
  =	
  Browser()	
  
br.set_handle_robots(False)	
  
br.addheaders	
  =	
  [('User-­‐agent',	
  'Mozilla/5.0	
  (X11;	
  U;	
  Linux	
  i686;	
  en-­‐US;	
  	
  
rv:1.9.0.1)	
  Gecko/2008071615	
  Fedora/3.0.1-­‐1.fc9	
  Firefox/3.0.1')]	
  
br.open(amazon_url)	
  
br.select_form(name="sign_in")	
  
br["email"]	
  =	
  email	
  
br["password"]	
  =	
  password	
  
response	
  =	
  br.submit()	
  
d	
  =	
  pq(response.get_data())	
  
data.text	
  for	
  data	
  in	
  d('div').filter('.data’)	
  
mechanizeで扱えないサイト
•  JavascriptでDOMを組み立てるよう
なタイプのサイト
–  googleとか

•  最近増えている…
–  Javascript MVCとかさ
Browserを使えばいい
•  Browserをスクリプトから操作する
–  perlだとWWW::Mechanize::Firefox
–  pythonだとSelenium
•  chrome, firefox, ie, opera

•  ヘッドレスでやりたい
–  CasperJS
–  SeleniumのPhantomJSドライバを使う
Selenium+PhatomJS
seleniumを使う
from	
  selenium	
  import	
  webdriver	
  
import	
  ime	
  
driver	
  =	
  webdriver.PhantomJS()	
  
driver.get("h3ps://www.google.co.jp/webhp?hl=ja&tab	
  	
  
=ww&authuser=0#authuser=0&hl=ja&q=python")	
  
print	
  driver.current_url	
  
ime.sleep(2)	
  
driver.save_screenshot("screen_shot130918.png")	
  
driver.quit()
デモ
google patent searchにオ
プションを指定しながら検索する
エレメントを探す
•  めんどくさい
•  最近はChrome使っている
–  虫眼鏡で探して
–  Xpathに変換して
–  find_element_by_xpathメソッドに渡し
て
–  処理する
エレメントを探す
•  chromeの虫眼鏡
Xpathとしてコピー
スクリプトで使う
•  find_element_by_xpathメソッドに
渡して
•  send_keysとかclickメソッドを呼び出
す
デバッグ
•  デバッグの基本はもちろんプリントデバッ
グ
•  save_screenshot( check.png )で
出力して
•  スクリーンショットを目視する
–  なかなかつらい作業
デバッグ時の注意点
•  要素が見つからない等の理由でエラー終
了すると、バックグラウンドで動いてい
るghostdriverが死なずに生き残ってい
る
•  ふと気づくと大量に発生しているのでたま
にプロセスをキルしましょう
まとめ
•  むかしむかし「正確無比なドラマーは結
局打ち込みと変わらないんじゃないか
なー」と思ったことがあります
•  今は、多少ゆらぎをもたせたロボットは、
よく訓練された人力クローラと変わらな
いんじゃないかなーと思っています

Más contenido relacionado

Más de Kazufumi Ohkawa

pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画
Kazufumi Ohkawa
 
入門機械学習読書会二回目
入門機械学習読書会二回目入門機械学習読書会二回目
入門機械学習読書会二回目
Kazufumi Ohkawa
 
入門機械学習1,2章
入門機械学習1,2章入門機械学習1,2章
入門機械学習1,2章
Kazufumi Ohkawa
 

Más de Kazufumi Ohkawa (20)

圏論walker
圏論walker圏論walker
圏論walker
 
ハッピーハッピー構造生成まつり’67
ハッピーハッピー構造生成まつり’67ハッピーハッピー構造生成まつり’67
ハッピーハッピー構造生成まつり’67
 
ClickでCLIをお手軽につくるぅぅぅ
ClickでCLIをお手軽につくるぅぅぅClickでCLIをお手軽につくるぅぅぅ
ClickでCLIをお手軽につくるぅぅぅ
 
SAR精度70% その先へ
SAR精度70% その先へSAR精度70% その先へ
SAR精度70% その先へ
 
視覚化サービス構築の際に気をつけること
視覚化サービス構築の際に気をつけること視覚化サービス構築の際に気をつけること
視覚化サービス構築の際に気をつけること
 
量子化学計算外伝 すごいよ!! FMO
量子化学計算外伝 すごいよ!! FMO量子化学計算外伝 すごいよ!! FMO
量子化学計算外伝 すごいよ!! FMO
 
あまり知られていない静岡の言語戦争の歴史
あまり知られていない静岡の言語戦争の歴史あまり知られていない静岡の言語戦争の歴史
あまり知られていない静岡の言語戦争の歴史
 
IPython notebookを使おう
IPython notebookを使おうIPython notebookを使おう
IPython notebookを使おう
 
Mishimasyk141025
Mishimasyk141025Mishimasyk141025
Mishimasyk141025
 
実践コンピュータビジョン8章
実践コンピュータビジョン8章実践コンピュータビジョン8章
実践コンピュータビジョン8章
 
R -> Python
R -> PythonR -> Python
R -> Python
 
ChEMBLを使おう
ChEMBLを使おうChEMBLを使おう
ChEMBLを使おう
 
Unigram mixtures
Unigram mixturesUnigram mixtures
Unigram mixtures
 
Redmineでもめない会議☆
Redmineでもめない会議☆Redmineでもめない会議☆
Redmineでもめない会議☆
 
pythonでオフィス快適化計画
pythonでオフィス快適化計画pythonでオフィス快適化計画
pythonでオフィス快適化計画
 
入門機械学習読書会9章
入門機械学習読書会9章入門機械学習読書会9章
入門機械学習読書会9章
 
入門機械学習6章
入門機械学習6章入門機械学習6章
入門機械学習6章
 
Javascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScriptJavascriptを書きたくないヒ トのためのPythonScript
Javascriptを書きたくないヒ トのためのPythonScript
 
入門機械学習読書会二回目
入門機械学習読書会二回目入門機械学習読書会二回目
入門機械学習読書会二回目
 
入門機械学習1,2章
入門機械学習1,2章入門機械学習1,2章
入門機械学習1,2章
 

Último

Último (7)

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

エンジョイ☆スクレイピング