もうブラウザは見たくない
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-stapy12
DBエンジニアに必要な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までに退社できる一助となれば幸いです。
終わり

Requestsで始める5分前帰社