美文网首页
如何用Python收取邮件,并筛选币安的公告

如何用Python收取邮件,并筛选币安的公告

作者: 杨卫祥_老杨提醒 | 来源:发表于2020-05-14 23:49 被阅读0次

    最近币安的公告页面(链接)升级,无法通过爬虫的方式获取最新公告,包括非小号和MyToken也捕捉不到币安的公告,自己尝试了各种方法也没成功。

    币安的公告经常会发出一些活动或者上币之类,比如某种币一旦有类似消息,很快会爆拉超过10个点,第一时间获得公告就至关重要。

    后来突发其想,币安公告页面提供关注并邮件订阅功能,如下图,点击关注,需要登陆自己的币安账户,登陆成功之后右上角会显示自己的邮箱前缀,再点击关注新文章,这样有公告时会第一时间收到邮件,币安建议关注两个组:“最新公告”和“币币交易”。

    接下来的问题就是如何用Python收到邮件,在网了寻找了很多,发现太多已经失效不能用了。

    后来在这里https://www.liaoxuefeng.com/wiki/1016959663602400/1017800447489504找到一篇还能运行的。感谢这篇文章的作者廖雪峰,这篇文章阅读量87万多了,我直接在他的代码上更改的。

    我要做的就是监控最新的邮件,然后用关键字binance去筛选收件人,如果是币安的邮件,就发钉钉提醒我。

    测试了几个邮箱结果:

    网易,经常出现登陆不上的情况 b'-ERR Unable to log on’,最后放弃

    Gmail:首先需要开启'允许安全性较低的应用'https://myaccount.google.com/lesssecureapps。其次登陆后会的邮件提示'登录尝试已被阻止',这个要同意,证明是本人。安全性要求非常高,最后还是放弃了。

    搜狐:发现其邮件索引是倒序,并且还有一个欢迎的新邮件,没调试好

    QQ邮箱最好用,最先就选择了它。

    使用的库是poplib

    # 邮箱QQ 需要开启POP服务,并申请授权码,比使用密码更安全

    pop3_server ='pop.qq.com'

    username ='XXX@qq.com'

    password ='XXX'  # 授权码

    # 连接到POP3服务器:

    server = poplib.POP3(pop3_server)

    # 身份认证:

    server.user(username)

    server.pass_(password)

    # list()返回所有邮件的编号:

    resp, mails, octets = server.list()

    # 可以查看返回的列表类似[b'1 82923', b'2 2184', ...]

    num =3  # 监控几个邮件

    text_or_not =1  # 是否需要查看正文,这个设置个开关,有时候正文内容太多,显示不方便

    notice_List = []# 内容列表

    Subject_List = []# 主题列表

    From_List = []# 发件人列表

    # 最新一封邮件, 注意索引号从1开始, 最大的是最新的邮件

    i =0

    index =len(mails)

    while i < num:# 获取多个邮件

        resp, lines, octets = server.retr(index - i)

    # 可以获得整个邮件的原始文本:

        msg_content =b'\r\n'.join(lines).decode('utf-8')#

    # 解析出邮件:这个是库的内容,把邮件内容解析为Message对象

        msg = Parser().parsestr(msg_content)

    handle_info(msg)

    Subject_List.append(Subject)

    From_List.append(From)

    i = i +1

    print('邮件主题', Subject_List)

    print('发件人是', From_List)

    通过以上程序就可以获得主题和发件人,接下来根据需要筛选就行了。

    这里出现一个小插曲值得提下,原来处理邮件的函数名叫print_info(), 但我在输入 print(content)时,因为Pycharm在输入print回车会带出来print_info(content),导致耽误大半天时间找不出问题。所以print_info这种名字不能用,改成handle_info了

    另外时间间隔我测试几天后,发现设置成至少设置成14秒,否则QQ邮箱会当成攻击关闭链接,不过延时还是不小。

    while True:

    try:

    resp, mails, octets = server.list()

    index =len(mails)

    resp, lines, octets = server.retr(index)

    msg_content =b'\r\n'.join(lines).decode('utf-8')

    msg = Parser().parsestr(msg_content)

    handle_info(msg)

    # 新邮件提醒

            if 1:

    if Subjectnot in Subject_List:

    content ='新邮件' +'\n' + Subject

    print(content)

    print('邮件正文', text_content)

    send_msg1 = send_dingding_msg1(content)

    print(send_msg1)

    # break

    # 币安新邮件提醒

            if 1:

    if 'binance' in Fromand (Subjectnot in Subject_List):

    print('币安新公告', Subject)

    content ='币安新公告' +'\n' + Subject

    print('邮件正文', text_content)

    send_msg1 = send_dingding_msg1(content)

    print(send_msg1)

    time.sleep(14)

    except Exception as err:

    time.sleep(2)

    print('查询错误', err)

    完整代码放在了Github上了:https://github.com/Yang-Weixiang/Python/blob/master/Mail/Fetch-Email-and-Binance-Latest-Announcements

    相关文章

      网友评论

          本文标题:如何用Python收取邮件,并筛选币安的公告

          本文链接:https://www.haomeiwen.com/subject/zknfohtx.html