日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Python模擬163登陸獲取郵件列表

利用cookielib和urllib2模塊模擬登陸163的例子有很多,近期看了《python模擬登陸163郵箱并獲取通訊錄》一文,受到啟發(fā),試著對收件箱、發(fā)件箱等進行了分析,并列出了所有郵件列表及狀態(tài),包括發(fā)件人、收件人、主題、發(fā)信時間、已讀未讀等狀態(tài)。

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價值的長期合作伙伴,公司提供的服務(wù)項目有:域名與空間、虛擬主機、營銷軟件、網(wǎng)站建設(shè)、桐城網(wǎng)站維護、網(wǎng)站推廣。

1、參考代碼:http://hi.baidu.com/fc_lamp/blog/item/2466d1096fcc532de8248839.html%EF%BB%BF

 
 
 
  1. #-*- coding:UTF-8 -*-
  2. import urllib,urllib2,cookielib
  3. import xml.etree.ElementTree as etree #xml解析類
  4. class Login163:
  5.    #偽裝browser
  6.     header = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
  7.     username = ''
  8.     passwd = ''
  9.     cookie = None #cookie對象
  10.     cookiefile = './cookies.dat' #cookie臨時存放地
  11.     user = ''
  12.     
  13.     def __init__(self,username,passwd):
  14.         self.username = username
  15.         self.passwd = passwd
  16.         #cookie設(shè)置
  17.         self.cookie = cookielib.LWPCookieJar() #自定義cookie存放
  18.         opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie))
  19.         urllib2.install_opener(opener)
  20.    #登陸    
  21.     def login(self):       
  22.         #請求參數(shù)設(shè)置
  23.         postdata = {
  24.             'username':self.username,
  25.             'password':self.passwd,
  26.             'type':1
  27.             }
  28.         postdata = urllib.urlencode(postdata)
  29.         #發(fā)起請求
  30.         req = urllib2.Request(
  31.                 url='http://reg.163.com/logins.jsp?type=1&product=mail163&url=http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D1',
  32.                 data= postdata,#請求數(shù)據(jù)
  33.                 headers = self.header #請求頭
  34.             )
  35.         result = urllib2.urlopen(req).read()
  36.         result = str(result)
  37.         self.user = self.username.split('@')[0]
  38.         self.cookie.save(self.cookiefile)#保存cookie
  39.         
  40.         if '登錄成功,正在跳轉(zhuǎn)...' in result:
  41.             #print("%s 你已成功登陸163郵箱。---------\n" %(user))
  42.             flag = True
  43.         else:
  44.             flag = '%s 登陸163郵箱失敗。'%(self.user)
  45.            
  46.         return flag
  47.    #獲取通訊錄
  48.     def address_list(self):
  49.         #獲取認證sid
  50.         auth = urllib2.Request(
  51.                 url='http://entry.mail.163.com/coremail/fcg/ntesdoor2?username='+self.user+'&lightweight=1&verifycookie=1&language=-1&style=1',
  52.                 headers = self.header
  53.             )
  54.         auth = urllib2.urlopen(auth).read()
  55.         for i,sid in enumerate(self.cookie):#enumerate()用于同時返數(shù)字索引與數(shù)值,實際上是一個元組:((0,test[0]),(1,test[1]).......)這有點像php里的foreach 語句的作用
  56.             sid = str(sid)
  57.             if 'sid' in sid:
  58.                 sid = sid.split()[1].split('=')[1]
  59.                 break
  60.         self.cookie.save(self.cookiefile)
  61.         
  62.         #請求地址
  63.         url = 'http://twebmail.mail.163.com/js4/s?sid='+sid+'&func=global:sequential&showAd=false&userType=browser&uid='+self.username
  64.         #參數(shù)設(shè)定(var 變量是必需要的,不然就只能看到:S_OK這類信息)
  65.         #這里參數(shù)也是在firebug下查看的。
  66.         postdata = {
  67.             'func':'global:sequential',
  68.             'showAd':'false',
  69.             'sid':sid,
  70.             'uid':self.username,
  71.             'userType':'browser',
  72.             'var':'pab:searchContactsFNfalsetruepab:getAllGroups'
  73.             }
  74.         postdata = urllib.urlencode(postdata)
  75.         
  76.         #組裝請求
  77.         req = urllib2.Request(
  78.             url = url,
  79.             data = postdata,
  80.             headers = self.header
  81.             )
  82.         res = urllib2.urlopen(req).read()
  83.         
  84.         #解析XML,轉(zhuǎn)換成json
  85.         #說明:由于這樣請求后163給出的是xml格式的數(shù)據(jù),
  86.         #為了返回的數(shù)據(jù)能方便使用最好是轉(zhuǎn)為JSON
  87.         json = []
  88.         tree = etree.fromstring(res)
  89.         obj = None
  90.         for child in tree:
  91.             if child.tag == 'array':
  92.                 obj = child            
  93.                 break
  94.         #這里多參考一下,etree元素的方法屬性等,包括attrib,text,tag,getchildren()等
  95.         obj = obj[0].getchildren().pop()
  96.         for child in obj:
  97.             for x in child:
  98.                 attr = x.attrib
  99.                 if attr['name']== 'EMAIL;PREF':
  100.                     value = {'email':x.text}
  101.                     json.append(value)
  102.         return json
  103.         
  104. #Demo
  105. print("Requesting......\n\n")
  106. login = Login163('xxxx@163.com','xxxxx')
  107. flag = login.login()
  108. if type(flag) is bool:
  109.     print("Successful landing,Resolved contacts......\n\n")
  110.     res = login.address_list()
  111.     for x in res:
  112.         print(x['email'])
  113. else:
  114.     print(flag)

#p#

2、分析收件箱、發(fā)件箱等網(wǎng)址

在參考代碼中,獲取通訊錄的url為

url = 'http://twebmail.mail.163.com/js4/s?sid='+sid+'&func=global:sequential&showAd=false&userType=browser&uid='+self.username,通過對郵箱地址的分析,發(fā)現(xiàn)收件箱、發(fā)件箱等的url為url = 'http://twebmail.mail.163.com/js4/s?sid='+sid+'&func=mbox:listMessages&showAd=false&userType=browser&uid='+self.username,其中func=mbox:listMessages。其對收件箱、發(fā)件箱的具體區(qū)分在下面的postdata中,具體為:

(1)收件箱

 
 
 
  1. postdata = {
  2. 'func':'global:sequential',
  3. 'showAd':'false',
  4. 'sid':'qACVwiwOfuumHPdcYqOOUTAjEXNbBeAr',
  5. 'uid':self.username,
  6. 'userType':'browser',
  7. 'var':'1datetruefalse020'
  8. }

(2)發(fā)件箱

 
 
 
  1. postdata = {
  2. 'func':'global:sequential',
  3. 'showAd':'false',
  4. 'sid':'qACVwiwOfuumHPdcYqOOUTAjEXNbBeAr',
  5. 'uid':self.username,
  6. 'userType':'browser',
  7. 'var':'3datetruefalse020'
  8. }

可以看出,兩段代碼的不同之處就是fid的取值不同,其中收件箱為1,發(fā)件箱為3,草稿箱為2。

#p#

3、xml解析

利用ElementTree 類來進行xml到字典的轉(zhuǎn)換。在獲取通訊錄的實例中,主要使用了這一方法。本例子(具體代碼見后文)在收取郵件列表時,并沒有用這一方法,仍然使用的是字符串的處理方法。但這里還是列一下ElementTree 類對xml的處理。如(參考地址:http://hi.baidu.com/fc_lamp/blog/item/8ed2d53ada4586f714cecb3d.html):

 
 
 
  1. -
  2.    S_OK
  3.  -
  4.   -
  5.      S_OK
  6.     -
  7.      +
  8.      +
  9.      +
  10.      +
  11.      +
  12.      +
  13.      +
  14.      +
  15.      +
  16.      +
  17.      +
  18.      +
  19.      +
  20.      +
  21.      +
  22.      +
  23.      
  24.    
  25.   +
  26.   
  27.  

解決方法:

 
 
 
  1. #-*- coding:UTF-8 -*-
  2. import xml.etree.ElementTree as etree #xml解析類
  3. def xml2json(xml):
  4.     json = []
  5.     tree = etree.fromstring(xml) #如果是文件可用parse(source)
  6.     obj = None
  7.     for child in tree:
  8.         if child.tag == 'array':
  9.             obj = child            
  10.             break
  11.     #這里多參考一下,etree元素的方法屬性等,包括attrib,text,tag,getchildren()等
  12.     obj = obj[0].getchildren().pop()
  13.     for child in obj:
  14.         for x in child:
  15.             attr = x.attrib
  16.             if attr['name']== 'EMAIL;PREF':
  17.                 value = {'email':x.text}
  18.                 json.append(value)
  19.     return json

#p#

4、收件箱郵件列表

本例子只列出了收件箱郵件列表,如果需要,可根據(jù)以上介紹調(diào)整fid值,列出發(fā)件箱、草稿箱等的郵件列表。程序在windosxp、py2.6環(huán)境下調(diào)查通過,運行后,會在當(dāng)前目錄下生成三個文件:inboxlistfile.txt記錄收件箱郵件列表,addfile.txt記錄通訊錄,cookies.dat記錄cookies。具體代碼如下:

 
 
 
  1. #-*- coding:UTF-8 -*-
  2. import urllib,urllib2,cookielib
  3. import xml.etree.ElementTree as etree #xml解析類
  4. class Login163:
  5.    #偽裝browser
  6.     header = {'User-Agent':'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6'}
  7.     username = ''
  8.     passwd = ''
  9.     cookie = None #cookie對象
  10.     cookiefile = './cookies.dat' #cookie臨時存放地
  11.     user = ''
  12.     
  13.     def __init__(self,username,passwd):
  14.         self.username = username
  15.         self.passwd = passwd
  16.         #cookie設(shè)置
  17.         self.cookie = cookielib.LWPCookieJar() #自定義cookie存放
  18.         opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(self.cookie))
  19.         urllib2.install_opener(opener)
  20.    #登陸    
  21.     def login(self):       
  22.         #請求參數(shù)設(shè)置
  23.         postdata = {
  24.             'username':self.username,
  25.             'password':self.passwd,
  26.             'type':1
  27.             }
  28.         postdata = urllib.urlencode(postdata)
  29.         #發(fā)起請求
  30.         req = urllib2.Request(
  31.                 url='http://reg.163.com/logins.jsp?type=1&product=mail163&url=http://entry.mail.163.com/coremail/fcg/ntesdoor2?lightweight%3D1%26verifycookie%3D1%26language%3D-1%26style%3D1',
  32.                 data= postdata,#請求數(shù)據(jù)
  33.                 headers = self.header #請求頭
  34.             )
  35.         result = urllib2.urlopen(req).read()
  36.         result = str(result)
  37.         #print result
  38.         self.user = self.username.split('@')[0]
  39.         self.cookie.save(self.cookiefile)#保存cookie
  40.         
  41.         if '登錄成功,正在跳轉(zhuǎn)...' in result:
  42.             #print("%s 你已成功登陸163郵箱。---------n" %(user))
  43.             flag = True
  44.         else:
  45.             flag = '%s 登陸163郵箱失敗。'%(self.user)
  46.            
  47.         return flag
  48.    #獲取通訊錄
  49.     def address_list(self):
  50.         #獲取認證sid
  51.         auth = urllib2.Request(
  52.                 url='http://entry.mail.163.com/coremail/fcg/ntesdoor2?username='+self.user+'&lightweight=1&verifycookie=1&language=-1&style=1',
  53.                 headers = self.header
  54.             )
  55.         auth = urllib2.urlopen(auth).read()
  56.         #authstr=str(auth)
  57.         #print authstr
  58.         
  59.         for i,sid in enumerate(self.cookie):
  60.             sid = str(sid)
  61.             #print 'sid:%s' %sid
  62.             if 'sid' in sid:
  63.                 sid = sid.split()[1].split('=')[1]
  64.                 break
  65.         self.cookie.save(self.cookiefile)
  66.         
  67.         #請求地址
  68.         url = 'http://twebmail.mail.163.com/js4/s?sid='+sid+'&func=global:sequential&showAd=false&userType=browser&uid='+self.username
  69.         #參數(shù)設(shè)定(var 變量是必需要的,不然就只能看到:S_OK這類信息)
  70.         #這里參數(shù)也是在firebug下查看的。
  71.         postdata = {
  72.             'func':'global:sequential',
  73.             'showAd':'false',
  74.             'sid':'qACVwiwOfuumHPdcYqOOUTAjEXNbBeAr',
  75.             'uid':self.username,
  76.             'userType':'browser',
  77.             'var':'pab:searchContactsFNfalsetruepab:getAllGroups'
  78.             }
  79.         postdata = urllib.urlencode(postdata)
  80.         
  81.         #組裝請求
  82.         req = urllib2.Request(
  83.             url = url,
  84.             data = postdata,
  85.             headers = self.header
  86.             )
  87.         res = urllib2.urlopen(req).read()
  88.         #print str(res)
  89.         
  90.         #解析XML,轉(zhuǎn)換成json
  91.         #說明:由于這樣請求后163給出的是xml格式的數(shù)據(jù),
  92.         #為了返回的數(shù)據(jù)能方便使用最好是轉(zhuǎn)為JSON
  93.         json = []
  94.         tree = etree.fromstring(res)
  95.         
  96.         
  97.         obj = None
  98.         for child in tree:
  99.             if child.tag == 'array':
  100.                 obj = child            
  101.                 break
  102.         #這里多參考一下,etree元素的方法屬性等,包括attrib,text,tag,getchildren()等
  103.         obj = obj[0].getchildren().pop()
  104.         for child in obj:
  105.             for x in child:
  106.                 attr = x.attrib
  107.                 if attr['name']== 'EMAIL;PREF':
  108.                     value = {'email':x.text}
  109.                     json.append(value)
  110.         return json
  111. #獲取收件箱
  112.     def minbox(self):
  113.         #獲取認證sid
  114.         auth = urllib2.Request(
  115.                 url='http://entry.mail.163.com/coremail/fcg/ntesdoor2?username='+self.user+'&lightweight=1&verifycookie=1&language=-1&style=1',
  116.                 headers = self.header
  117.             )
  118.         auth = urllib2.urlopen(auth).read()
  119.         #authstr=str(auth)
  120.         #print authstr
  121.         
  122.         for i,sid in enumerate(self.cookie):
  123.             sid = str(sid)
  124.             #print 'sid:%s' %sid
  125.             if 'sid' in sid:
  126.                 sid = sid.split()[1].split('=')[1]
  127.                 break
  128.         self.cookie.save(self.cookiefile)
  129.         
  130.         
  131.         url = 'http://twebmail.mail.163.com/js4/s?sid='+sid+'&func=mbox:listMessages&showAd=false&userType=browser&uid='+self.username
  132.         
  133.         postdata = {
  134.             'func':'global:sequential',
  135.             'showAd':'false',
  136.             'sid':'qACVwiwOfuumHPdcYqOOUTAjEXNbBeAr',
  137.             'uid':self.username,
  138.             'userType':'browser',
  139.             'var':'1datetruefalse020'
  140.             }
  141.         postdata = urllib.urlencode(postdata)
  142.         
  143.         #組裝請求
  144.         req = urllib2.Request(
  145.             url = url,
  146.             data = postdata,
  147.             headers = self.header
  148.             )
  149.         res = urllib2.urlopen(req).read()
  150.         liststr=str(res).split('')#用object進行分割
  151.         inboxlistcount=len(liststr)-1#記錄郵件封數(shù)
  152.         inboxlistfile=open('inboxlistfile.txt','w')
  153.         t=0  #記錄當(dāng)前第幾封信
  154.         for i in liststr:
  155.             if 'xml' in i and ' version=' in i:
  156.                 inboxlistfile.write('inbox 共'+str(inboxlistcount)+'信')
  157.                 inboxlistfile.write('\n')
  158.             if 'name="id"' in i:
  159.                 t=t+1
  160.                 inboxlistfile.write('第'+str(t)+'封:')
  161.                 inboxlistfile.write('\n')
  162.                 #寫入from
  163.                 beginnum=i.find('name="from"')
  164.                 endnum=i.find('',beginnum)
  165.                 inboxlistfile.write('From:'+i[beginnum+12:endnum])
  166.                 inboxlistfile.write('\n')
  167.                 #寫入to
  168.                 beginnum=i.find('name="to"')
  169.                 endnum=i.find('',beginnum)
  170.                 inboxlistfile.write('TO:'+i[beginnum+10:endnum])
  171.                 inboxlistfile.write('\n')
  172.                 #寫入subject
  173.                 beginnum=i.find('name="subject"')
  174.                 endnum=i.find('',beginnum)
  175.                 inboxlistfile.write('Subject:'+i[beginnum+15:endnum])
  176.                 inboxlistfile.write('\n')
  177.                 #寫入date:
  178.                 beginnum=i.find('name="sentDate"')
  179.                 endnum=i.find('',beginnum)
  180.                 inboxlistfile.write('Date:'+i[beginnum+16:endnum])
  181.                 inboxlistfile.write('\n')
  182.                 if 'name="read">true' in i:
  183.                     inboxlistfile.write('郵件狀態(tài):已讀')
  184.                     inboxlistfile.write('\n')
  185.                 else:
  186.                     inboxlistfile.write('郵件狀態(tài):未讀')
  187.                     inboxlistfile.write('\n')
  188.                 #寫用郵件尺寸
  189.                 beginnum=i.find('name="size"')
  190.                 endnum=i.find('',beginnum)
  191.                 inboxlistfile.write('郵件尺寸:'+i[beginnum+12:endnum])
  192.                 inboxlistfile.write('\n')
  193.                 #寫入郵件編號,用于下載郵件
  194.                 beginnum=i.find('name="id"')
  195.                 endnum=i.find('',beginnum)
  196.                 inboxlistfile.write('郵件編號:'+i[beginnum+10:endnum])
  197.                 inboxlistfile.write('\n\n')
  198.                 
  199.         inboxlistfile.close()
  200.                 
  201.         
  202.         
  203. if __name__=='__main__':
  204.     print("Edit @xiaowuyi V1.0  http://www.cnblogs.com/xiaowuyi")
  205.     login = Login163('XXXX@163.com','AAAAA')
  206.     flag = login.login()
  207.     if type(flag) is bool:
  208.     
  209.     #login.letterdown()
  210.         print("登陸成功,正在下載列表和通訊錄………………")
  211.         login.minbox()
  212.         res = login.address_list()
  213.         addfile=open('addfile.txt','w')
  214.         for x in res:
  215.             addfile.write(x['email'])
  216.         addfile.close()
  217.         print("已完成")
  218.     else:
  219.         print(flag)

  220. 本文標(biāo)題:Python模擬163登陸獲取郵件列表
    網(wǎng)站URL:http://www.5511xx.com/article/dhpcoic.html