Loading

【第5篇】Python爬虫实战-读取临时邮箱内容

目标网址:https://rootsh.com/?v=

目录

 一、明确目标

二、分析网页

三、编写代码

(1)申请临时邮箱

(2)读取邮件内容

四、运行测试


 一、明确目标

目标明确,根据指定临时邮箱地址,读取邮件最新内容。

二、分析网页

在使用这个问网站的临时邮箱前,需要先申请使用,然后才能接受到邮件信息。

首先打开控制台,监听页面交互请求,先点随机生成一个邮箱,然后点击申请邮箱按钮。

可以发现接口没有加密,这个我们可以直接用python来进行模拟请求申请邮箱。

 其次我们注意到,下面有一个轮询请求,应该就是再获取该邮箱是否有接收到新邮件,以便于实时更新到网页上。

这是还没有收到新邮件的response响应结果:

 这是已经有新邮件的response响应结果:

 可以里面有一个OYaNP1MCiPsW62y9KKHiYQ.eml,感觉上很奇怪,其实并没有,我们在页面上点击已经接收到邮件进去。

 可以发现,该参数是获取内容的关键参数,只需要将该参数拼接到该url后面,即可看到邮件内容。 https://rootsh.com/win/zcqo0deb(a)bccto-_-cc/

 分析网页结构,我们可以看到邮件内容是被一个div里,我们可以利用html解析到具体的内容。

我们程序分两步来完成整个操作,先编写申请邮箱,然后在编写读取邮件内容

三、编写代码

(1)申请临时邮箱

# 由于网站规则:@bccto.cc 邮箱名只支持字母和数字
def apply_email(email):
    url = "https://rootsh.com/applymail"
    payload = "mail={}%40bccto.cc".format(email)
    headers = {
        'cookie': '__gads=ID=5057786cfb2c66f4-22ee69ff34cf0094:T=1637486405:RT=1637486405:S=ALNI_MZS8hasvI07J7Teld1qevXJCEh0xw; UM_distinctid=17d41d57d367ab-0d02c53f45975b-3354417a-1fa400-17d41d57d37cdb; CNZZDATA3645431=cnzz_eid%3D360129947-1637481214-https%253A%252F%252Frootsh.com%252F%26ntime%3D1637481214; mail="2|1:0|10:1637487469|4:mail|40:emNxbzBkZWJAYmNjdG8uY2N8MTYzNzQ4NzQ2OQ==|62c43aa0a54d521203d369274b62eba2c730bd23b27fe60eb51a802660f21627"; time="2|1:0|10:1637487744|4:time|4:MA==|8194e1de83b3bb8b481eb938676423a82aa4e3da47192827061e5cd488c5d6b9"; mail="2|1:0|10:1637487791|4:mail|40:dmsyeHY5OTdAYmNjdG8uY2N8MTYzNzQ4Nzc5MQ==|bef8ce72e198df89190399718d828ad37d720ef595e0d0b08e3b077deda76f74"; time="2|1:0|10:1637487791|4:time|16:MTYzNzQ4Nzc5MQ==|6d8df9d0d7eaea212eb808c3e68325727969c5223ae8b551256bc8cb57574ad1"',
        'origin': 'https://rootsh.com',
        'accept-language': 'zh-CN,zh;q=0.9',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3877.400 QQBrowser/10.8.4533.400 chrome-extension',
        'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',

    }
    try:
        response = requests.post(url, headers=headers, data=payload).json()
        if response['success'] == 'true':
            print("临时邮箱:{}@bccto.cc,申请成功!".format(email))
    except:
        print("临时邮箱:{}@bccto.cc,申请失败!".format(email))

(2)读取邮件内容

# 获取邮件
def get_email(email):
    url = "https://rootsh.com/getmail"
    payload = "mail={}%40bccto.cc".format(email)
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
        'content-type': 'application/x-www-form-urlencoded; charset=UTF-8',
    }

    try:
        response = requests.post(url, headers=headers, data=payload).json()
        uid = response["mail"][0][-2]
        return pase_html(email, uid)
    except:
        pass


# 解析html
def pase_html(email, uid):
    url = "https://rootsh.com/win/{}(a)bccto-_-cc/{}".format(email, uid)
    print(url)
    headers = {

        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36',
        'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
        'accept-language': 'zh-CN,zh;q=0.9'
    }
    html = requests.get(url, headers=headers).text
    dom = etree.HTML(html)
    div1 = dom.xpath("/html/body/div[1]/text()")
    div2 = dom.xpath("/html/body/div[2]/text()")
    return "".join(div1) + "".join(div2)

四、运行测试

 

 

posted @ 2021-11-21 22:29  Roc-xb  阅读(158)  评论(0)    收藏  举报

易微帮源码


易微帮官网