Python—将爬取到的51Job职位信息定时发送到QQ邮箱

1.导入schedule模块

安装schedule模块:pip install schedule
在这里插入图片描述

2.定时发送数据实例

import schedule
import time
def job():
    print('您好!')
schedule.every(2).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:45").do(job)
#检查部署的情况,如果任务准备就绪,就开始执行任务。
while True:
    schedule.run_pending()
    time.sleep(1)

3.QQ邮箱开启SMTP服务和提取授权码的操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.两大邮箱 SMTP 服务器及端口

QQ 邮箱
服务器地址:smtp.qq.com SSL 协议端口:465 或 587 非 SSL 协议端口:25
网易邮箱
服务器地址:smtp.163.com SSL 协议端口:465 或 994 非 SSL 协议端口:25
使用SSL协议,发件邮箱需要开启SMTP服务,使用授权码

5.发送到QQ邮箱实例

Python内置模块:smtplib是用来发送邮件用的,email是用来构建邮件内容的。

import smtplib
from email.mime.text import MIMEText
from email.header import Header
global mailbox,password,receiver         #设置为全局变量
mailbox = input('请输入你的邮箱:')
password = input('请输入你的密码:')
receiver = input('请输入收件人的邮箱:')
mailhost = 'smtp.qq.com'        #发信服务器
qqmail = smtplib.SMTP()        #开启发信服务,这里使用的是加密传输
qqmail.connect(mailhost,25)      #25是端口号
qqmail.login(mailbox,password)       #登录发信邮箱
content = '您好!'       #设定发送文本
message = MIMEText(content,'plain','utf-8')      #传入文本,文本类型(plain)、文本编码
subject = '天气状况数据'       #设定邮件标题
message['subject'] = Header(subject,'utf-8')        #设定邮件头信息
#使用异常捕捉机制
try:
    qqmail.sendmail(mailbox,receiver,message.as_string())      #开始发送邮件
    print('邮件发送成功')
except:
    print('邮件发送失败')
qqmail.quit()      #关闭服务器

6.爬取51Job职位信息

爬取51Job前程无忧网站时,我们使用selenium来模拟浏览器爬取
在这里插入图片描述

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait   #显示等待
from selenium.webdriver.support import expected_conditions as EC #条件
from selenium.webdriver.common.by import By
from lxml import html
etree=html.etree
class Spider(object):
    def __init__(self):
        self.login_url='https://login.51job.com/login.php'
        self.page_url='https://i.51job.com/userset/my_51job.php'
    def wait_input(self):
        self.place=input('请输入所在地:')
    def _login(self):
        driver.get(self.login_url)
        WebDriverWait(driver,1000).until(
            EC.url_to_be(self.page_url)
        )
        print("登录成功!")
    def enter_page(self):
        driver.find_element_by_xpath('//*[@id="topIndex"]/div/p/a[1]').click()
        time.sleep(0.5)
        driver.find_element_by_xpath('//*[@id="kwdselectid"]').send_keys('python')
        WebDriverWait(driver,1000).until(
            EC.text_to_be_present_in_element_value((By.XPATH,'//p[@id="work_position_click"]/input'),self.place)
        )
        driver.find_element_by_xpath('/html/body/div[3]/div/div[1]/div/button').click()
        time.sleep(0.5)
        response=driver.page_source
        html=etree.HTML(response)
        data=''.join(html.xpath('//div[@class="dw_tlc"]/div[4]/text()')).strip()
        self.email(data)

7.组合完成此项目

每隔三个小时将更新的数据发送到QQ邮箱:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait   #显示等待
from selenium.webdriver.support import expected_conditions as EC #条件
from selenium.webdriver.common.by import By
from lxml import html
etree=html.etree
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import schedule
import time
global mailbox,password,receiver  #设置全局变量
mailbox = input('请输入你的邮箱:')
password = input('请输入你的密码:')
receiver = input('请输入收件人的邮箱:')
driver=webdriver.Chrome(executable_path='F:\\Download\\chromedriver.exe')
class Spider(object):
    def __init__(self):
        self.login_url='https://login.51job.com/login.php'
        self.page_url='https://i.51job.com/userset/my_51job.php'
    def wait_input(self):
        self.place=input('请输入所在地:')
    def _login(self):
        driver.get(self.login_url)
        WebDriverWait(driver,1000).until(
            EC.url_to_be(self.page_url)
        )
        print("登录成功!")
    def enter_page(self):
        driver.find_element_by_xpath('//*[@id="topIndex"]/div/p/a[1]').click()
        time.sleep(0.5)
        driver.find_element_by_xpath('//*[@id="kwdselectid"]').send_keys('python')
        WebDriverWait(driver,1000).until(
            EC.text_to_be_present_in_element_value((By.XPATH,'//p[@id="work_position_click"]/input'),self.place)
        )
        driver.find_element_by_xpath('/html/body/div[3]/div/div[1]/div/button').click()
        time.sleep(0.5)
        response=driver.page_source
        html=etree.HTML(response)
        data=''.join(html.xpath('//div[@class="dw_tlc"]/div[4]/text()')).strip()
        self.email(data)
    def email(self,data):
        mailhost = 'smtp.qq.com'  # 发信服务器
        qqmail = smtplib.SMTP()  # 开启发信服务,这里使用的是加密传输
        qqmail.connect(mailhost, 25)  # 25是端口号
        qqmail.login(mailbox, password)  # 登录发信邮箱
        content = data  # 设定发送文本
        message = MIMEText(content, 'plain', 'utf-8')  # 传入文本,文本类型(plain)、文本编码
        subject = 'python职位变化'  # 设定邮件标题
        message['subject'] = Header(subject, 'utf-8')  # 设定邮件头信息
        # 使用异常捕捉机制
        try:
            qqmail.sendmail(mailbox, receiver, message.as_string())  # 开始发送邮件
            print('邮件发送成功')
        except:
            print('邮件发送失败')
        qqmail.quit()  # 关闭服务器
    def job(self):
        self.enter_page()
    def run(self):
        self.wait_input()
        self._login()
        self.enter_page()
if __name__ == '__main__':
    spider=Spider()
    spider.run()
    schedule.every(3).hours.do(spider.job)
    while True:
        schedule.run_pending()
        time.sleep(1)

8.项目结果

这里要注意一点:邮箱的密码是给定的授权码
在这里插入图片描述
在这里插入图片描述
这样便可以随时查看51Job网上职业信息变化……

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值