这是我的Python第一个实战项目,通过百度和参考csdn里面的文章发送成功!
一、首先心里话(qinghua)需要利用爬虫自动爬取。
# 获取情话
texts = [] #建立一个空列表
for i in range(1,70):
url = 'https://www.duanwenxue.com/huayu/tianyanmiyu/list_{}.html'.format(i) #甜言蜜语的话一共77页,for 循环提取70页
response = requests.get(url)
texts.append(response.text) #到这里70页的包含html标签的情话都有了,下面只需要从里面提取需要的信息
articles = []
for text in texts:
soup = BeautifulSoup(text,'lxml')
arttis = soup.find('div', class_='list-short-article').find_all('a', {'target': "_blank"}) # 寻找情话内容
# 通过列表推导式以及for循环获取到每个a标签里面的text内容并通过strip去除空格
articles.extend([arttis[i].text.strip() for i in range(len(arttis))])
todaywords = articles[random.randint(0, len(articles)-1)] # 随机选取其中一条情话
return todaywords
二、发邮件
这样邮件要发送的内容就有了。
接下来要发邮件。
发邮件部分用到了smtp模块,email模块等。
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
def sendemail(toaddr='******@163.com', message=''): #对方的邮件地址
fromaddr = '*********@126.com' # 你的邮箱
password = '******' # 你的密码
smtp_server = 'smtp.126.com' # smtp地址
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] = _format_addr('自己的称呼 <%s>' % fromaddr)
msg['To'] = _format_addr('对方的称呼 <%s>' % toaddr)
msg['Subject'] = Header('每日晨间问候', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(fromaddr, password)
server.sendmail(fromaddr, [toaddr], msg.as_string())
server.quit()
return
三、把上面的程序组成完整的程序。
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib #引入一些必要的库
def _format_addr(s):
name, addr = parseaddr(s)
return formataddr((Header(name, 'utf-8').encode(), addr))
def sendemail(toaddr='jrwlyelunan@163.com', message=''):
fromaddr = '******@126.com' # 你的邮箱
password = '******' # 你的密码
smtp_server = 'smtp.126.com' # smtp地址
msg = MIMEText(message, 'plain', 'utf-8')
msg['From'] = _format_addr('你的称呼 <%s>' % fromaddr)
msg['To'] = _format_addr('对方的称呼 <%s>' % toaddr)
msg['Subject'] = Header('每日晨间问候', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.set_debuglevel(1)
server.login(fromaddr, password)
server.sendmail(fromaddr, [toaddr], msg.as_string())
server.quit()
return
# -*- coding: utf-8 -*-
import requests
import random
from bs4 import BeautifulSoup
from datetime import datetime
def getlloverwords():
# 获取情话
texts = []
for i in range(1,70):
url = 'https://www.duanwenxue.com/huayu/tianyanmiyu/list_{}.html'.format(i)
response = requests.get(url)
texts.append(response.text)
articles = []
for text in texts:
soup = BeautifulSoup(text,'lxml')
arttis = soup.find('div', class_='list-short-article').find_all('a', {'target': "_blank"}) # 寻找情话内容
# 通过列表推导式以及for循环获取到每个a标签里面的text内容并通过strip去除空格
articles.extend([arttis[i].text.strip() for i in range(len(arttis))])
todaywords = articles[random.randint(0, len(articles)-1)] # 随机选取其中一条情话
return todaywords
def dailymorning():
message = '今天我想跟你说:\n'+\
getlloverwords()
sendemail(toaddr='******@163.com', message=message) #地址
if __name__ == '__main__':
dailymorning()
整个程序采用函数封装,从主函数main开始执行,先调用dailymoring()函数,接着继续调用getlloverwords()获取心里话,调用 sendemail发送邮件。
#*号部分替换成自己和对方的邮件地址
四、计算机自动执行程序发送设置
首先Python需要安装requests库和BeautifulSoup库。
然后利用计算机自动执行程序。
在搜索里面输入计算机管理进入,依次进入任务计划程序—Microsoft,右边出现创建基本任务,点击即可创建。具体可以百度。



发送后的样子是这样的:

下面说下上面的程序会遇到的问题:
首先python程序本来用的anaconda,但是利用电脑自动运行程序,就需要把程序存到硬盘,所以需要用python来执行,之前都在anaconda环境中(anaconda是虚拟环境,包含很多第三方库)我的python并没有装相关库,所以python需要装BeautifulSoup库和requests库。
安装库的时候anacanda和python很容易冲突。
下面介绍一个办法防止调用python时候它们起冲突。
首先找到anaconda的安装路径

把anaconda里面的python.exe复制一个并重命名为python-ana.exe
同理,找到原来python的安装路径把Python.exe改成python3.exe
在找安装路径的时候又遇到问题,就是找不到。
这里有个简单的办法,就是重新安装,就可以重新看到安装路径。
比如我的python装在哪里我找不到了,那我就重新安装。

这样在命令行中输入Python3调用python就不会进入anaconda的环境,执行pip install + 库名就可以顺利安装Python的库
在安装库的时候,又遇到了无法安装requests库。
一般情况都是直接打开cmd窗口,输入python3进入Python的环境,然后输入pip install request
但是我的一直装不上,后来发现需要把cmd的路径更改到python3所在的文件夹,再执行就成功了。
总结:首先这个程序只是发送了一句话,其实如果能够带上天气情况更好。这也是参考文章的全部内容。但是因为目前中国天气网总出错,所以把天气部分去掉了。
另外,发邮件那里,我自己邮箱是126的,如果是其他邮箱需要做相关更改。
下次应该把参考文章做个整理,附在最后。
网友评论