エンジョイ☆スクレイピング
@fmkz___
もしもそれがヒトのようにアクセス
し、ヒトのようにインターバルをと
るのなら、それはヒトである
自己紹介
•  kzfm (@fmkz___)
–  blog.kzfmix.com
–  Shizuoka.py

•  とある製薬企業の研究員
•  日本酒とdrum n bass好き
•  Python歴は6年くらい
–  (その前はPe...
あるサービスのRSSをクロー
ラで定期的にチェックしてい
たのですが、
「ロボットアクセス禁止って
書いてあるだろ」ってブロッ
クされました
文化の違いって難しいですね?
シンプルなサイト
簡単
requestsを使う
•  URLを指定すると、HTMLやXMLが
返ってくるような
–  RSSや普通のウェブページ

•  requests+pyquery
•  requests+feedparser
例
•  Naverまとめからひ
たすら富士山の画像
を集める
import	
  re	
  
import	
  requests	
  
c	
  =	
  requests.get('h3p://
matome.naver.jp/oda...
状態を持つサイト
statefulはstressful
mechanizeを使う
•  ログインしてごにょごにょする必要がある
ようなタスク
•  queryがPOSTでsearch.doとか
result.doみたいなサイト
例
•  amazonのアフィリエイトにアクセスし
て売上を(メールで確認したい)
コード(一部)
from	
  mechanize	
  import	
  Browser	
  
from	
  pyquery	
  import	
  PyQuery	
  as	
  pq	
  
br	
  =	
  Browser...
mechanizeで扱えないサイト
•  JavascriptでDOMを組み立てるよう
なタイプのサイト
–  googleとか

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

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

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

8,287

Published on

Seleniumの

Published in: Technology
0 Comments
27 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
8,287
On Slideshare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
36
Comments
0
Likes
27
Embeds 0
No embeds

No notes for slide

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

  1. 1. エンジョイ☆スクレイピング @fmkz___
  2. 2. もしもそれがヒトのようにアクセス し、ヒトのようにインターバルをと るのなら、それはヒトである
  3. 3. 自己紹介 •  kzfm (@fmkz___) –  blog.kzfmix.com –  Shizuoka.py •  とある製薬企業の研究員 •  日本酒とdrum n bass好き •  Python歴は6年くらい –  (その前はPerl) •  よく使うのはFlask, Pandas –  最近DjangoかRoRに移ろうかなと
  4. 4. あるサービスのRSSをクロー ラで定期的にチェックしてい たのですが、 「ロボットアクセス禁止って 書いてあるだろ」ってブロッ クされました
  5. 5. 文化の違いって難しいですね?
  6. 6. シンプルなサイト 簡単
  7. 7. requestsを使う •  URLを指定すると、HTMLやXMLが 返ってくるような –  RSSや普通のウェブページ •  requests+pyquery •  requests+feedparser
  8. 8. 例 •  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
  9. 9. 状態を持つサイト statefulはstressful
  10. 10. mechanizeを使う •  ログインしてごにょごにょする必要がある ようなタスク •  queryがPOSTでsearch.doとか result.doみたいなサイト
  11. 11. 例 •  amazonのアフィリエイトにアクセスし て売上を(メールで確認したい)
  12. 12. コード(一部) 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’)  
  13. 13. mechanizeで扱えないサイト •  JavascriptでDOMを組み立てるよう なタイプのサイト –  googleとか •  最近増えている… –  Javascript MVCとかさ
  14. 14. Browserを使えばいい •  Browserをスクリプトから操作する –  perlだとWWW::Mechanize::Firefox –  pythonだとSelenium •  chrome, firefox, ie, opera •  ヘッドレスでやりたい –  CasperJS –  SeleniumのPhantomJSドライバを使う
  15. 15. Selenium+PhatomJS
  16. 16. 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()
  17. 17. デモ google patent searchにオ プションを指定しながら検索する
  18. 18. エレメントを探す •  めんどくさい •  最近はChrome使っている –  虫眼鏡で探して –  Xpathに変換して –  find_element_by_xpathメソッドに渡し て –  処理する
  19. 19. エレメントを探す •  chromeの虫眼鏡
  20. 20. Xpathとしてコピー
  21. 21. スクリプトで使う •  find_element_by_xpathメソッドに 渡して •  send_keysとかclickメソッドを呼び出 す
  22. 22. デバッグ •  デバッグの基本はもちろんプリントデバッ グ •  save_screenshot( check.png )で 出力して •  スクリーンショットを目視する –  なかなかつらい作業
  23. 23. デバッグ時の注意点 •  要素が見つからない等の理由でエラー終 了すると、バックグラウンドで動いてい るghostdriverが死なずに生き残ってい る •  ふと気づくと大量に発生しているのでたま にプロセスをキルしましょう
  24. 24. まとめ •  むかしむかし「正確無比なドラマーは結 局打ち込みと変わらないんじゃないか なー」と思ったことがあります •  今は、多少ゆらぎをもたせたロボットは、 よく訓練された人力クローラと変わらな いんじゃないかなーと思っています
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×