• Python 爬虫监控女神的QQ空间新的说说,实现邮箱发送


    主要实现的功能就是:监控女神的 QQ空间,一旦女神发布新的说说,你的邮箱马上就会收到说说内容,是不是想了解一下

    先看看代码运行效果图:
    这里写图片描述

    这里写图片描述

    PS:只有你有一台云服务器你就可以把程序24h运行起来

    直接上代码:

    # -*- coding:utf-8 -*-
    from bs4 import BeautifulSoup
    from selenium import webdriver
    import time
    import random
    import os
    
    # by 留歌36
    
    from email.mime.text import MIMEText
    import smtplib
    
    # 注意这里是配置你的源邮箱信息(发送邮件的邮箱)
    account = ""
    password = ""
    
    # 注意配置接收邮箱的信息
    to = "893861319@qq.com"
    
    # 注意是女神的qq号码
    qq="你的女神的QQ号码"
    
    
    #使用Selenium的webdriver实例化一个浏览器对象,在这里使用Phantomjs
    driver = webdriver.PhantomJS(executable_path=r"F:\phantomjs.exe")
    
    # 登录QQ空间
    def get_shuoshuo(qq):
        try:
            # 注意更改http://user.qzone.qq.com/{女神的qq号码}/311
            driver.get('http://user.qzone.qq.com/你的女神的QQ号码/311'.format(qq))
            time.sleep(5)
            driver.find_element_by_id('login_div')
        except:
            print("#####,没有找到login_div,说明您在线########")
            sea()
            time.sleep(30)
            # 注意更改
            get_shuoshuo('你的女神的QQ号码')
        else:
            print("#####,找到login_div,说明您没有登陆,现在开始登陆########")
            # 如果页面存在登录的DIV,则模拟登录
            driver.switch_to.frame('login_frame')
            driver.find_element_by_id('switcher_plogin').click()
            driver.find_element_by_id('u').clear()  # 选择用户名框
            # 注意更改为你的qq号码
            driver.find_element_by_id('u').send_keys('####')
            driver.find_element_by_id('p').clear()
            # 注意更改为你的qq密码
            driver.find_element_by_id('p').send_keys('#####')
            driver.find_element_by_id('login_button').click()
            time.sleep(3)
            print("#####登陆成功########")
            #注意更改为你女神的QQ号码
            get_shuoshuo('你的女神的QQ号码')
            #判断好友空间是否设置了权限,通过判断是否存在元素ID:QM_OwnerInfo_Icon
        driver.implicitly_wait(3)
    
    
    def sea():
        try:
            driver.find_element_by_id('QM_OwnerInfo_Icon')
            b = True
        except:
            b = False
        #如果有权限能够访问到说说页面,那么定位元素和数据,并解析
        if b == True:
            driver.switch_to.frame('app_canvas_frame')
            content = driver.find_elements_by_css_selector('.content')
            stime = driver.find_elements_by_css_selector('.c_tx.c_tx3.goDetail')
            shuoshuo = content[0].text
            shijian= stime[0].text
            context = '说说内容为:'+ shuoshuo
            # context = '说说内容为:' + shuoshuo + "       " + '发表时间是:' + shijian
            cun = ''.join(context)
            if toCheck(cun):
                # 调用发送邮件的函数
                print("##########准备发送邮件##########")
                send(to, "女神空间更新啦~~", context)
                print("##########发送邮件完成##########")
                print("##########准备保存说说##########")
                toSave(cun)
                print("##########保存说说完成##########")
            else:
                print('***还没有发布新的说说***')
        # driver.close()
        # driver.quit()
    
    # 发送邮件的函数
    def send(to, title, content):
        msg = MIMEText(content)
        msg['Content-Type'] = 'text/plain; charset="utf-8"'
        msg['Subject'] = title
        msg['From'] = account
        msg['To'] = to
        try:
            smtp = smtplib.SMTP()
            smtp.connect('smtp.163.com')
            smtp.login(account, password)
            smtp.sendmail(account, to, msg.as_string())
            smtp.close()
        except Exception as e :
            print (str(e))
    
    # 检查是否有新的内容发布
    def toCheck(data):
        if not os.path.exists('shuoshuo.txt'):
            return True
        else:
            f = open('shuoshuo.txt','r')
            existshuoshuo= f.readlines();
            if data + '
    ' in existshuoshuo:
                return False
            else:
                return True
    
    # 保存说说内容到本地
    def toSave(text):
        f = open('shuoshuo.txt' , mode='a')
        f.write(text+ '
    ')
        f.close()
    
    
    #让代码在服务器上一直跑着
    while True:
        get_shuoshuo(qq)
    

    *如果你有什么好的建议可以留言呢
    有什么问题也可以留言,我会尽量第一时间回复你的*

  • 相关阅读:
    Golang服务器热重启、热升级、热更新(safe and graceful hot-restart/reload http server)详解
    如果清空Isilon cluster上的文件,Shadow Store和data reduction的统计信息也会一并清空么?
    合并从B站下载的分开的音频和视频
    使用Notepad++远程编辑WinSCP中打开的文本文件报错“file xxx does exist anymore”
    Leetcode 1143. 最长公共子序列(LCS)动态规划
    Leetcode 126 127 单词接龙i&ii
    如何在一个Docker中同时运行多个程序进程?
    dockerfile cmd使用
    Leetcode 160.相交链表
    Leetcode 912. 排序数组
  • 原文地址:https://www.cnblogs.com/liuge36/p/12614801.html
Copyright © 2020-2023  润新知