2023年11月28日发(作者:)

python爬⾍-获取个⼈⽹易邮箱所有邮件列表信息

最近开始了python爬⾍的学习,这⾥带来利⽤python实现⽹易163邮箱个⼈收件箱列表信息的爬取的⼩项⽬,刚开始学习,写的不好的地

⽅,望⼤神指正,诚恳学习。

主要内容

1. 模拟163邮箱登录

2. 获取登录后的收件箱页⾯

3. 分析页⾯得到所有邮件的列表的信息

/js6/?sid=XCwPLNlNiskqLJBOvaNNyAURxrosaJnJ&df=mail163_lette

这个sid码就是我们登录的关键,下⾯我来说明怎么得到这个sid码。

获取sid

刚才我们选中了那个post⽇志,选择消息头,我们可以看到这次⽇志请求⽹址

这⾥请求的⽹址和我们⽬前所在的⽹址并不⼀样,这说明我们登陆时经过了这么⼀个中转的⽹址,想看到这个⽹址下是什么,很简单,点开

上⾯的响应选项你就可以看到这个⽹址下是什么内容。

通过这个响应我们可以发现,我们提交的参数中并没有这个sid码,但是在响应中出现了这个sid码,因此这个sid码使我们登陆所需要的。

但是这个sid码只在本次登录有效,并不能⼀劳永逸,所以我们每次登录都需要通过这个中转界⾯来获取这个sid码。这是我们就需要来获取

这个页⾯的源码并提取这个sid码。下⾯附上我的代码。

# -*- coding:utf-8 -*-

import urllib

import urllib2

import re

import cookielib

#163邮箱类

class MAIL:

#初始化

def __init__(self):

#获取登录请求的⽹址,也就是上边提到的请求⽹址

#设置代理,以防⽌本地IP被封

rl = "202.106.16.36:3128"

#初始化sid

= ""

#第⼀次登陆所需要的请求头request headers,这个在消息头⾥的请求头有

eaders = {

'Host':"",

'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",

rl = "/entry/cgi/ntesdoor?df=mail163_letter&from=web&funcid=loginone&iframe=1&language=-1&passtype=1&product=m

'Accept':"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

'Accept-Encoding':"gzip, deflate, br",

'Referer':"/",

'Connection':"keep-alive",

}

#设置⽤户名和密码,输⼊⾃⼰的账号密码

me = '*******'

= '*******'

#post所包含的参数也就是参数⾥的表单数据

= {

'savelogin':"0",

'url2':"/errorpage/",

'username':me,

'password':

}

#post编码转换

ta = ode()

#设置代理

= andler({'http':rl})

#设置cookie对象,会在登录后获取登录⽹页的cookie

= kieJar()

#设置cookie处理器

Handler = okieProcessor()

#设置登录时⽤到的opener,相当于我们直接打开⽹页⽤的urlopen

= _opener(Handler,,ndler)

#模拟登陆并获取sid

def loginPage(self):

#发出⼀个请求

request = t(rl,ta,eaders)

#得到响应

response = (request)

#需要将响应中的内容⽤read读取出来获得⽹页代码,⽹页编码为utf-8

content = ().decode('utf-8')

#打印获得的⽹页代码

print content

#⽣成邮箱爬⾍对象

mail = MAIL()

#调⽤loginPage⽅法来获取⽹页内容

age()

登陆成功的话可以看到输出的结果为

<html><head><script type="text/javascript"> = "/js6/?sid=DCTmVAgAnZBmwWWqcjAAXXreaiJVaZYk&df=mail16

这⾥做⼀点说明:

上⾯需要填⼊⾃⼰的账号密码,代理设置中很多代理不能⽤,这个亲测可⽤

这样我们就得到了中转界⾯的页⾯代码,⾥边就有我们需要的sid码。如何提取这个sid码呢?我们就需要⽤正则表达式来匹配他。相应的提

取代码如下,把其加⼊到loginPage中即可

#构建抓取sid码的正则表达式

sidpattern = e('sid=(.*?)&',re.S)

#获取并储存sid码,打印出来

result = (sidpattern,content)

self.sid = (1)

print self.sid

PS:正则表达式中 .*? 是⼀个很好⽤的组合,re.S是点任意匹配模式。

这样我们就成功抓取到了sid码,并且得到了登录时所需要的cookie。下⼀步要⽤抓取到的sid码来登录邮箱

登录邮箱

获取到了sid码之后我们就能登录邮箱了。

进⼊收件箱,点开响应选项,找到所有的post的⽇志,我们会发现有⼀个⽇志中的响应会是我们的邮件信息,这个就是我们需要的登陆的参

数和信息:

点开消息头这个请求的⽹址就是我们收件箱的地址,并且这个请求⽹址中有我们刚提取出来的sid码,所以我们只需要重定向到这个⽹址就

能获得我们收件箱的页⾯信息了。这⾥我们只需要重置请求头,利⽤上边已获得的cookie和sid码重新请求就⾏了,下⾯附上代码:

#通过sid码获得邮箱收件箱信息

def messageList(self):

#重定向的⽹址,⽤获取到的sid码替换

#新的请求头

Headers = {

'Host':"",

'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",

'Accept':"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

'Accept-Encoding':"gzip, deflate, br",

'Referer':"/js6/?sid=%s&df=mail163_letter"%,

'Connection':"keep-alive"

}

#发出请求并获得响应

request = t(listUrl,headers = Headers)

print listUrl

response = (request)

#提取响应的页⾯内容

content = ().decode('utf-8')

return content

listUrl = '/js6/s?sid=%s&func=mbox:listMessages&TopTabReaderShow=1&TopTabLofterShow=1&welcome_welcomemodule_mailr

当然我们也可以打印出相应的内容以⽅便我们做后续的处理

print content

这样我们就得到了收件箱页⾯的邮件列表信息,下边来解析这页代码。

提取邮件列表基本信息

输出刚才的内容我们会得到像下⾯这样的结果

...

<string name="id">48:1tbiMA34VVWBT7UDcQAAsMstring>

name="fid">1

name="size">10183

<string name="from">"⽹易邮件中⼼" <mail@>string>

<string name="to">"" <xxxxxxxxx@163.com>string>

<string name="subject">丙申猴年,你的⼤圣,可会归来?string>

<date name="sentDate">2016-01-23 12:30:37date>

<date name="receivedDate">2016-01-23 12:30:37date>

name="priority">3

name="backgroundColor">0

<string name="antiVirusStatus">unscanedstring>

name="label0">0

name="flags">

<boolean name="read">trueboolean>

name="ctrls">

<string name="RulesType">ntessysstring>

<string name="hmid"><2134498648.1996962.98.@>string>

...

这些代码段就是我们收件箱的基本信息,每个 object 标签中都包含了⼀个邮件的发件⽅、收件⽅、邮件主题、收发时间等信息。我们要做

的就是利⽤正则表达式把这些信息提取出来(当然也可以⽤beautifulsoup来提取),并输出。每个标签中的内容都⼀样,故正则表达式及

代码如下:

#获取邮件信息

def getmail(self):

#先获得收件箱列表页⾯内容

messages = eList()

#信息提取的正则表达式

#re模块中的findall会找出所有匹配的字符串,返回⼀个列表

mails = l(pattern,messages)

#遍历列表输出中相应项的内容,每个(.*?)对应了相应的项

for mail in mails:

print '-'*50

print '发件⼈',mail[0],'主题',mail[2],'发送时间',mail[3]

print '收件⼈',mail[1],u'接收时间',mail[4]

pattern = e('"(.*?)".*?name="to">(.*?)<.*?name="subject">(.*?)<.*?name="sentDate">(.*?)<.*?name="receivedDate">(.*?

这样就可以输出收件箱所有邮件列表的基本信息。

下⾯附上完整代码:

# -*- coding:utf-8 -*-

import urllib

import urllib2

import re

import cookielib

#163邮箱类

class MAIL:

#初始化

def __init__(self):

#获取登录请求的⽹址

#设置代理,以防⽌本地IP被封

rl = "202.106.16.36:3128"

#初始化sid

= ""

#第⼀次登陆所需要的请求头request headers

eaders = {

rl = "/entry/cgi/ntesdoor?df=mail163_letter&from=web&funcid=loginone&iframe=1&language=-1&passtype=1&product=m

eaders = {

'Host':"",

'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",

'Accept':"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

'Accept-Encoding':"gzip, deflate, br",

'Referer':"/",

'Connection':"keep-alive",

}

#设置⽤户名和密码

me = 'xxxx'

= 'xxxx'

#post所包含的参数

= {

'savelogin':"0",

'url2':"/errorpage/",

'username':me,

'password':

}

#post编码转换

ta = ode()

#设置代理

= andler({'http':rl})

#设置cookie对象,会在登录后获取登录⽹页的cookie

= kieJar()

#设置cookie处理器

Handler = okieProcessor()

#设置登录时⽤到的opener,相当于我们直接打开⽹页⽤的urlopen

= _opener(Handler,,ndler)

#模拟登陆并获取sid

def loginPage(self):

try:

#发出⼀个请求

request = t(rl,ta,eaders)

#得到响应

response = (request)

#需要将响应中的内容⽤read读取出来获得⽹页代码,⽹页编码为utf-8

content = ().decode('utf-8')

#打印获得的⽹页代码

print content

#设定提取sid码的正则表达式

sidpattern = e('sid=(.*?)&',re.S)

result = (sidpattern,content)

= (1)

print

except ror, e:

print

#通过sid码获得邮箱收件箱信息

def messageList(self):

#重定向的⽹址

#新的请求头

Headers = {

'Host':"",

'User-Agent':"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0",

'Accept':"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

'Accept-Language':"zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",

'Accept-Encoding':"gzip, deflate, br",

'Referer':"/js6/?sid=%s&df=mail163_letter"%,

'Connection':"keep-alive"

}

#发出请求并获得响应

request = t(listUrl,headers = Headers)

listUrl = '/js6/s?sid=%s&func=mbox:listMessages&TopTabReaderShow=1&TopTabLofterShow=1&welcome_welcomemodule_mailr

request = t(listUrl,headers = Headers)

response = (request)

#提取响应的页⾯内容

content = ().decode('utf-8')

return content

#获取邮件信息

def getmail(self):

messages = eList()

mails = l(pattern,messages)

for mail in mails:

print '-'*50

print '发件⼈',mail[0],'主题',mail[2],'发送时间',mail[3]

print '收件⼈',mail[1],u'接收时间',mail[4]

pattern = e('"(.*?)".*?name="to">(.*?)<.*?name="subject">(.*?)<.*?name="sentDate">(.*?)<.*?name="receivedDate">(.*?

#创建163邮箱爬⾍类

mail = MAIL()

age()

l()

谢谢观看,看完后也可以去试试,第⼀次写,写的不好的地⽅望指正。


本文发布于:2023-11-28,感谢您对本站的认可!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:网页错误详细信息

发布评论

评论列表(有0条评论)
    福州电脑网_福州电脑维修_福州电脑之家_福州iThome

    福州电脑网_福州电脑维修_福州电脑之家_福州iThome

    福州电脑维修网(fzithome.com)专业的电脑维修,笔记本维修,上门维修各种电脑,笔记本,平板等,快速上门.电脑知识频道内容覆盖:计算机资讯,电脑基础应用知识,各种电脑故障维修学习,电脑外设产品维修维护,病毒,软件,硬件,常识.