2016-10-26 1 views
0

私はメールにログインするコードを書いています。私はPythonが初めてです。 Gmailの受信トレイにある特定のリンク(https://nationalskillsregistry.com)からの応答を取得する方法。Python:Gmailの受信箱にあるリンクを訪問する方法

import imaplib 
import getpass 
import email 
import datetime 

detach_dir = '.' # directory where to save attachments (default: current) 
user = "[email protected]" 
pwd = "password" 
subject_filter='(SUBJECT "Daily News ")' 

# connecting to the gmail imap server 
m = imaplib.IMAP4_SSL("imap.gmail.com") 
m.login(user,pwd) 
print "logged in successfully..." 
m.select() 
typ, data = m.search(None, subject_filter) 
for num in data[0].split(): 
    rv, data = m.fetch(num, '(RFC822)') 
    if rv != 'OK': 
     print "ERROR getting message", num 
     #return 

msg = email.message_from_string(data[0][1]) 
print msg.get_payload(decode=True) 
m.close() 
m.logout() 

これは私が持っているメールです。

件名:毎日のニュース - 発表

ボディ:あなたはどのPOSセンターを訪問する必要はありませんオンライン決済を行っている場合

は親切に、注意してください。あなたのアカウントは直ちに更新されます。 あなたのアカウントが直ちに更新されない場合は、24時間待って有効性が延長されているかどうかを確認してください。 複数のオンライン支払いをしないでください。 https://nationalskillsregistry.comにお問い合わせください。

答えて

0

メールからURLを抽出し、ブラウザで開くことが2つあります。

ステップ1は難しい部分です。正規表現を使って電子メールを解析し、URLを引き出すことをお勧めします。あなたにこれを手伝ってくれる多くのオンラインリソースがあります。正規表現をテストするための私のお気に入りの1つはRegExrです。
コードはかなり簡単です。

import urllib2 

... 

response = urllib2.urlopen(url) 
html = response.read() 

があなたneed to download a file場合は、リフティングを行うためにurllibは使用することができます。

import webbrowser 

... 

webbrowser.open(url) 

それとも、あなたは生のHTMLをダウンロードしたい場合は -

import re 
... 
expr = r'((http)s?:\/\/((\.)?\w+)+(\/\S*)*)' 
#Parse with regex: Grabs possible URL (first only). Case insensitive. 
matches = re.match(expr, msg, re.I) 
url = matches[0] 

Step 2 is easy enough。その正規表現については

import urllib 

... 

urllib.urlretrieve ("http://www.example.com/songs/mp3.mp3", "mp3.mp3") 

、少しそれを抜け出すのを聞かせて:

( (http)s?:\/\/((\.)?\w+)+(\/\S*)* ) 

まず第一に、それは括弧内のすべてだということに注意してください。カッコはキャプチャグループであることを意味しているので、後でそれを確認することができます。

(http)s? 

これは、またはそれを次の 'を持っていない場合があります文字列「のhttp」を探します。

:\/\/ 

これはためになります「://」 - 「/」をエスケープする必要があるので、そこにある「\」。

(\.)?\w+)+ #Grab everything between :// and/

このビットは楽しいです。ピリオド(それはオプションです)、「単語文字」 - 文字や数字、句読点や空白は検索されません。
これを1回以上繰り返します。そうすることで、それは
のような文字列をつかむでしょうamazon.com
amazon.co。uk

(\/\S*)* 

これは、 '/'で始まる任意の数の文字列を取得し、その後に続く単語を持つことがあります。これは
/
/ホーム/基本的に、私はブラウザでそれを開く必要はありません
/foo.html?q=bar

+0

のようなものです。私はリンクからの応答を取得する必要があり、ボタンをクリックしてダウンロードする必要があるファイルがあります。 – SRK

+0

私の答えを更新しました – UrhoKarila

関連する問題