Python Web ペ-ジ自動操作
Cookpad 自動ログインファイル作成まとめ
ここまでで、Cookpad 「最近見たレシピ」自動ログインファイルを作成することができました。
ファイル内容をまとめて表示します。
#!/usr/bin/python3
#coding: utf-8
print("Content-type: text/html; charset=UTF-8\n\n")
import os
import logging
import mechanicalsoup
from dotenv import load_dotenv
load_dotenv()
# 認証の情報は環境変数から取得する。
COOKPAD_LOGIN = os.environ['COOKPAD_LOGIN']
COOKPAD_PASSWORD = os.environ['COOKPAD_PASSWORD']
def main():
browser = mechanicalsoup.StatefulBrowser()
# 最近見たレシピのページを開く。
logging.info('Navigating...')
browser.open('https://cookpad.com/recipe/history')
# ログインページ https://cookpad.com/login
# にリダイレクトされていることを確認する。
assert '/login' in browser.get_url()
# ログインフォーム(class="login_form" の要素内にあるform)を埋める。
# form の20行前ぐらいに<div class='login_form'>がある
browser.select_form('.login_form form')
browser['login'] = COOKPAD_LOGIN
# name="login" という入力ボックスを埋める。
browser['password'] = COOKPAD_PASSWORD
# name="password" という入力ボックスを埋める。
# フォームを送信する。
logging.info('Signing in...')
browser.submit_selected()
# ログインに失敗する場合は次のコメントを外して現在のページのHTMLを表示
# print(browser.get_current_page().prettify())
# 最近見たレシピのページが表示されていることを確認
assert '最近見たレシピ' in browser.get_current_page().title.string
# 最近見たレシピの名前とURLを表示する。
# id="main" のなかの<a class="recipe-title
# のなかにレシピ名とリンク先がある
for a in browser.get_current_page().select('#main a.recipe-title'):
print(a.text)
print(browser.absolute_url(a.get('href')))
# href属性の値は相対URLなので、絶対URLに変換する。
if __name__ == '__main__':
logging.basicConfig(level=logging.INFO)
# INFOレベル以上のログを出力する。
main()
本内容を TeraPad 等で作成したら、ファイル名を適当に
sc_cook.py
として保存します。
文字コ-ドは、UTF-8N
BOM なし
改行コ-ドは、LF
です。
保存先はホスト Wimdows OS の 共有フォルダ c:\vb_public_html にして、
ブラウザでアクセスできるようにします。
なお、
c:\vb_public_html
はゲスト OS Ubuntu のなかの
/home/yamada/public_html
とリンクしていて共有フォルダの関係にあります。
詳細は
ユ-ザ-ごとの公開ディレクトリを用意する
を読んでみてください。
sc_cook.py ファイル動作確認
Ubuntu ディスクトップにある □>_ アイコンから端末画面を開き、
yamada@ubuntu-20:~$ python3 public_html/sc_cook.py
として確認します。
yamada@ubuntu-20:~$ python3 public_html/sc_cook.py Content-type: text/html; charset=UTF-8 INFO:root:Navigating... INFO:root:Signing in... ステーキ肉でローストビーフ https://cookpad.com/recipe/6307513 ハイカラうどん☆すうどん https://cookpad.com/recipe/2549522 味噌ラーメン風★豚&もやしスープ https://cookpad.com/recipe/4275490
のように表示されれば OK です。
WEB で表示する前にエラ-がないことを確認してください。
エラ-がなければ、WEB でも表示してみましょう。
ブラウザのアドレスバーに
http://v-host.jp/sc_cook.py
または
http://localhost:8080/~yamada/sc_cook.py
と入力して、上記と同じように表示できれば OK です。
ただし、
INFO:root:Navigating...
INFO:root:Signing in...
の2行は表示されません。
また改行なしでズラズラと表示されます。
ここまでで、Cookpad 自動ログインファイルを作成ができました。
スクレイピングについてはまだやりたいことがあるのですが一旦終りにします。