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

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

on

  • 3,740 views

Seleniumの

Seleniumの

Statistics

Views

Total Views
3,740
Views on SlideShare
2,026
Embed Views
1,714

Actions

Likes
7
Downloads
13
Comments
0

18 Embeds 1,714

http://blog.aoshiman.org 785
http://blog.kzfmix.com 501
http://127.0.0.1 243
http://connpass.com 43
http://noric0124.hatenablog.jp 40
http://153.120.36.147 32
http://www.feedspot.com 27
http://cloud.feedly.com 19
http://www.hanrss.com 6
http://everrss.me 5
http://feedly.com 3
http://digg.com 2
http://blog.hatena.ne.jp 2
https://twitter.com 2
http://219.94.255.128 1
http://translate.googleusercontent.com 1
http://webcache.googleusercontent.com 1
http://digambara54.rssing.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

エンジョイ☆スクレイピング Presentation 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. まとめ •  むかしむかし「正確無比なドラマーは結 局打ち込みと変わらないんじゃないか なー」と思ったことがあります •  今は、多少ゆらぎをもたせたロボットは、 よく訓練された人力クローラと変わらな いんじゃないかなーと思っています