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

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

on

  • 3,198 views

Seleniumの

Seleniumの

Statistics

Views

Total Views
3,198
Slideshare-icon Views on SlideShare
1,615
Embed Views
1,583

Actions

Likes
4
Downloads
12
Comments
0

16 Embeds 1,583

http://blog.aoshiman.org 727
http://blog.kzfmix.com 486
http://127.0.0.1 193
http://connpass.com 43
http://noric0124.hatenablog.jp 37
http://153.120.36.147 32
http://www.feedspot.com 27
http://cloud.feedly.com 19
http://everrss.me 5
http://feedly.com 3
http://www.hanrss.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
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

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