001 |
#-*- coding:UTF-8 -*- |
002 |
import urllib,urllib2,cookielib |
003 |
import xml.etree.ElementTree as etree #xml解析类 |
007 |
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' } |
010 |
cookie = None #cookie对象 |
011 |
cookiefile = './cookies.dat' #cookie临时存放地 |
014 |
def __init__( self ,username,passwd): |
015 |
self .username = username |
018 |
self .cookie = cookielib.LWPCookieJar() #自定义cookie存放 |
019 |
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor( self .cookie)) |
020 |
urllib2.install_opener(opener) |
027 |
'username' : self .username, |
028 |
'password' : self .passwd, |
031 |
postdata = urllib.urlencode(postdata) |
034 |
req = urllib2.Request( |
037 |
headers = self .header #请求头 |
040 |
result = urllib2.urlopen(req).read() |
042 |
self .user = self .username.split( '@' )[ 0 ] |
044 |
self .cookie.save( self .cookiefile) #保存cookie |
046 |
if '登录成功,正在跳转...' in result: |
047 |
#print("%s 你已成功登陆163邮箱。---------n" %(user)) |
050 |
flag = '%s 登陆163邮箱失败。' % ( self .user) |
055 |
def address_list( self ): |
058 |
auth = urllib2.Request( |
060 |
headers = self .header |
062 |
auth = urllib2.urlopen(auth).read() |
063 |
for i,sid in enumerate ( self .cookie): |
066 |
sid = sid.split()[ 1 ].split( '=' )[ 1 ] |
068 |
self .cookie.save( self .cookiefile) |
072 |
#参数设定(var 变量是必需要的,不然就只能看到:<code>S_OK</code><messages>这类信息) |
075 |
'func' : 'global:sequential' , |
077 |
'sid' : 'qACVwiwOfuumHPdcYqOOUTAjEXNbBeAr' , |
079 |
'userType' : 'browser' , |
080 |
'var' : '<!--?xml version="1.0"?--><object><array name="items"><object><string name="func">pab:searchContacts</string><object name="var"><array name="order"><object><string name="field">FN</string><boolean name="desc">false</boolean><boolean name="ignoreCase">true</boolean></object></array></object></object><object><string name="func">pab:getAllGroups</string></object></array></object>' |
082 |
postdata = urllib.urlencode(postdata) |
085 |
req = urllib2.Request( |
088 |
headers = self .header |
090 |
res = urllib2.urlopen(req).read() |
093 |
#说明:由于这样请求后163给出的是xml格式的数据, |
094 |
#为了返回的数据能方便使用最好是转为JSON |
096 |
tree = etree.fromstring(res) |
099 |
if child.tag = = 'array' : |
102 |
#这里多参考一下,etree元素的方法属性等,包括attrib,text,tag,getchildren()等 |
103 |
obj = obj[ 0 ].getchildren().pop() |
107 |
if attr[ 'name' ] = = 'EMAIL;PREF' : |
108 |
value = { 'email' :x.text} |
113 |
print ( "Requesting......nn" ) |
114 |
login = Login163( 'xxxx@163.com' , 'xxxxx' ) |
116 |
if type (flag) is bool : |
117 |
print ( "Successful landing,Resolved contacts......nn" ) |
118 |
res = login.address_list() |
|