SlideShare uma empresa Scribd logo
1 de 26
Baixar para ler offline
エンジョイ☆スクレイピング
@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が死なずに生き残ってい
る
•  ふと気づくと大量に発生しているのでたま
にプロセスをキルしましょう
まとめ
•  むかしむかし「正確無比なドラマーは結
局打ち込みと変わらないんじゃないか
なー」と思ったことがあります
•  今は、多少ゆらぎをもたせたロボットは、
よく訓練された人力クローラと変わらな
いんじゃないかなーと思っています

Mais conteúdo relacionado

Mais de Kazufumi Ohkawa

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

Mais 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 (12)

論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
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の勉強会で発表されたものです。
 

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