質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

5回答

5341閲覧

pythonについての質問です。 pythonからヤフーメール等のサイトにログインする方法を教えてください。

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/10/01 11:36

pythonについての質問です。
pythonからヤフーメール等のサイトにログインする方法を教えてください。
urllib2というものを使うのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

こんにちは。

「PythonによるWebスクレイピング」(オライリージャパン)という本がありまして、
これの第9章と第10章が以下のような内容になっています。

9章 フォームとログインでクロール 9.1 Pythonリクエストライブラリ 9.2 基本フォームをサブミットする 9.3 ラジオボタン、チェックボックス、その他入力 9.4 ファイルと画像のサブミット 9.5 ログインとクッキーを扱う 9.5.1 HTTP基本アクセス認証 9.6 他のフォーム問題 10章 JavaScriptのスクレイピング 10.1 JavaScriptの簡単な紹介 10.1.1 共通JavaScriptライブラリ 10.2 Ajaxと動的 HTML 10.2.1 Seleniumを用いてPythonでJavaScriptを実行する 10.3 リダイレクトの処理 10.4 JavaScriptについての最終ノート

同著が手元にあったのでちょっとめくってみたところ、
これらの章で説明されているモジュールは以下です。

Requests を使ってPOSTリクエストを送る例は、以下にあります。

さらに複雑なPOSTリクエスト

Selenium のほうは、Selenium Webdriverを使えば、WEBブラウザを
手で操作するのと同じようなことをプログラムから制御できるので、
習得すれば出来ることの幅は広がるかもしれません。

以上ご参考になれば幸いです。

投稿2016/10/01 13:31

jun68ykt

総合スコア9058

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

既に色々な回答がありますので、補足程度に…

仮に、urllib2などを直接使用して実行する場合は、Yahoo!やgoogleなどへの接続時、おそらくUserAgentも指定する必要がありますよ。

昔に自作のスクレピング擬きで使ったので。

投稿2017/02/13 14:20

-jL-

総合スコア55

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Yahoo!メールなどのWebメールサービスはIMAPもサポートしているところが多いので、
下記のようなサイトで紹介されているように
IMAPプロトコルで接続して制御する方法もあります。

http://d.hatena.ne.jp/itasuke/20120126/p1
http://shanaikara.blogspot.jp/2016/01/pythonyahoo.html

投稿2016/10/15 13:34

nagaetty

総合スコア1106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

urllib(標準ライブラリ)やrequests(サードパーティ製 pip install requests)を使う方法もありますが、この手のログインに使うと少し面倒に感じることも多いです。

例えばrequestsを使うならば、以下になるのですが

python

1import requests # pip install requests 2 3url = "https://login.yahoo.co.jp/config/login" 4data = { 5 "login": "your_id", 6 "passwd": "your_pass", 7} 8response = requests.post(url, data=data)

上では大さっぱにloginとpasswdというデータだけ送っていますが、実際には他にも送信するものがあり、
ブラウザで実際にyahooにログインすると、以下のようなデータを送っていることがわかります。

.ct: .display: .done:http://www.yahoo.co.jp .keep: .reg:https://account.edit.yahoo.co.jp/registration?src=www&done=http%3A%2F%2Fwww.yahoo.co.jp .src:www .suppreg_skip: .yby: auth_lv: card_cushion_skip: ckey: nolink: nonotice: noreg: referrer: t_cushion: .albatross:dD1ac0Y4WEImc2s9SThOa05yRE9wOGJ2ZHhWSVpQWjQxMlZ4MGVBLQ== .requiredPsCheckBox: .slogin: .tries:1 ls_autocomp: showpw_status: login:ユーザ名! passwd:パスワード! .persistent:y ... ... ...

上記の実際に送っているもののいくつかは必要ないのですが、必須なものもあります。
どれが必須か?等と調べるのは中々に面倒ですし、動的に値を変えるものもあります。

ですので、このような場合は「selenium」を使いブラウザでの動きを自動化すると楽です。あくまでブラウザからやり取りを行ってくれるため、気にすることは減ります。
(requestsやurllib等で直接HTTPのやり取りを行うよりは、低速になってしまいますが...)

python

1from selenium import webdriver # pip install selenium 2 3LOGIN_URL = "https://login.yahoo.co.jp" 4ID = "ここにIDを入れる" 5PASSWORD = "ここにパスワード" 6 7# ブラウザの立ち上げとログイン画面を開く 8driver = webdriver.Firefox() 9driver.get(LOGIN_URL) 10 11# IDの入力 12yahoo_id = driver.find_element_by_id("username") 13yahoo_id.send_keys(ID) 14 15# パスワードの入力 16password = driver.find_element_by_id("passwd") 17password.send_keys(PASSWORD) 18 19# ログインボタンの押下と、その前後のスクリーンショット 20driver.save_screenshot("before_login.png") 21driver.find_element_by_id(".save").click() 22driver.save_screenshot("after_login.png") 23 24driver.quit()

試したところ、上のコードも文字認証してください、というページに飛ばされたので
実際はもう少し工夫する必要がありそうです。
ですが、イメージとしてはこのような感じになるかと思います。

投稿2016/10/02 01:19

toritoritorina

総合スコア972

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ウェブサイトにログインしてデータをスクレイプしたいということであれば、scrapy を使うのがいいかもしれないです。この手の処理によく使われるライブラリです。

投稿2016/10/01 12:26

mahata

総合スコア62

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/10/01 12:37

回答ありがとうございます。 なるほど、調べてみます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問