Upload
satoshi-yamada
View
898
Download
0
Embed Size (px)
Citation preview
もうブラウザは見たくないREQUESTSで始める明日5分早く帰る方法
山田 聡@DENZOWILL
#STAPY 20160510
WHO AM I?
非プログラマDBエンジニア6年生(PostgreSQL,Oracle)Python歴3年?worked at 株式会社アシストstapy参加8回目
#STAPYでLTを7回やらせていただきました
http://www.slideshare.net/satoshiyamada71697
stapy05-stapy12DBエンジニアに必要なPython
Pythonでハガキに宛名書きする方法PythonでIPMessenger送る方法etc
今日話すこと社内のイントラで提携業務を毎回マウスでやるのに消耗し
た山田がいろいろめんどくさくなって帰るのが遅くなるから
PythonのHTTPクライアントモジュール で効率化して23:00退社を22:55退社に改善しようって話
Requests
CAUTION実際の私の勤務時間とは関係ございま
せん
REQUESTS?サードパーティのHTTPクライアントライブラリ
Requestsは、人が使いやすいように設計されていて、Pythonで書かれているApache2 Licensed ベースのHTTPライブラリです。
REQUESTSを使うべき3つの理由1. 直感的につかえる
このメソッドだろうと思ったものがちゃんとある2. 豊富な機能
GET/POSTのステートレスなリクエストからセッション作成してのステートフルなリクエストまでダイジェスト認証もデフォルトでできる
3. 作者がイケメンhttp://www.kennethreitz.org/
天は二物を与えずは嘘
ぐぬぬ
とてもつかうのが簡単import requests
# GETなんだからgetなのは自然res = requests.get("https://github.com/denzow/ipymessenger")# HTTPステータスコードもそのままres.status_code # > 200# 中身はtextで見られるprint res.text
とてもつかうのが簡単import requests
# post用のデータはDictでそのままpayload = {'key1': 'value1', 'key2': 'value2'}
# POSTなんだからpostなのは自然res = requests.post("http://httpbin.org/post", data=payload)print res.text
どうやって5分早く帰る?
ブラウザ操作で投げているデータを真似られればイイ
CHROMEならデベロッパツール
NETWORKタブで確認可能
効率化したいアクションをした後
CSSとかJSへのアクセスは無視大体MethodがPOSTのやつを調べればOK
右クリックでパラメータとかをコピー
{ "log": { "version": "1.2", "creator": {:
"postData": { //このキーの下にある: "params": [ { "name": "key1", "value": "value1" }, { "name": "key2", "value": "value2" } ] } },::}
パラメータがわかったらimport requests
# post用のデータはDictでそのままpayload = {'key1': 'value1', 'key2': 'value2'}
# POSTなんだからpostなのは自然res = requests.post("http://xxxxxxx", data=payload)print res.text
さっきと全然かわらないこれをfor文で回せば情シスにすぐ怒られる
イントラはログインしないと使えないだろ
sessionをつかえばいけますimport requests
session = requests.session()auth_data = {"username":"xxxx", "password":"xxxxx" ....}# ログイン処理res = session.post("http://xxxxxxx/login", data=auth_data)# あとは好き勝手やるres = session.post("http://xxxxxxx/some_act", data={"key1":"data"})
ちなみにGitHubにログインして云々
えらく大変CSRF対策とかの関係で結構他にやらないといけない事が多い投げるデータも多いイントラくらいのセキュリティでとりあえず遊ぶのが吉
どうしてもやりたい素直にブラウザ操作自体をエミュレートしましょうJSいらないならMechanicalSoupが簡単
モジュール 補足mechanizeとBeautifulSoupを混ぜた合の子、Python3でも動作本当のブラウザ自体をコードで操作する。JSも動くブラウザライクな操作をコードで行う。Python2のみ。JSは動かない、古い
MechanicalSoup
Selenium
mechanize
MECHANICALSOUP往年の名作mechanizeとHTMLパーサとして人気のBeautifulSoupの合の子2014年からの作成で比較的新しいライブラリブラウザ操作からHTMLパースまで一人でやれる偉い子
まだまだ日本語のナレッジが少ないので次回のLTでどなたか是非
皆様が明日22:55までに退社できる一助となれば幸いです。
終わり