Your SlideShare is downloading. ×
エンジョイ☆スクレイピング
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

7,249
views

Published on

Seleniumの

Seleniumの

Published in: Technology

0 Comments
26 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,249
On Slideshare
0
From Embeds
0
Number of Embeds
21
Actions
Shares
0
Downloads
31
Comments
0
Likes
26
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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