文章目录
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网上职业信息变化……