笔记,邮件(2)
关于邮件的第二个例子,包含简单爬虫、文件写入等多方面的综合,写的不简练,后续改进。其中不少print是自己的调试和思路。
# coding=utf8 import urllib import urllib.request as request from bs4 import BeautifulSoup import re import smtplib from email.mime.text import MIMEText import string import csv # 发送邮件 def sendMail(body, locate): # 然后将第二天的任务添加到盒子中 user = '***@126.com' pwd = 'xxx' to = '###@qq.com' msg = MIMEText('早上好!\r\n' + body) msg['Subject'] = locate + '地区天气预报' msg['From'] = user msg['To'] = to s = smtplib.SMTP() # SMTP开通说明,详见http://www.cnblogs.com/testyao/p/6044410.html s.connect('smtp.126.com') # 使用connect方法链接到126邮箱,一般端口是25,省略不写 s.login(user, pwd) s.set_debuglevel(1) s.sendmail(user, to, msg.as_string()) s.quit() response = request.urlopen('http://www.weather.com.cn/weather/101020100.shtml') html = response.read() data = html.decode("utf-8") soup = BeautifulSoup(data, "html.parser") site = soup.find_all("a", href="http://sh.weather.com.cn") #匹配地址 day1 = soup.find_all("ul", {"class": "t clearfix"}) wea = soup.find_all("p", {"class": "wea"}) #匹配天气情况 tem = soup.find_all("p", {"class": "tem"}) #匹配温度 win = soup.find_all("p", {"class": "win"}) #匹配风速 days = soup.find_all("h1") #匹配日期 for locate1 in site: # print(locate1.get_text()) locate = locate1.get_text() # plan 0 思路是先在网上爬取,以规范格式(csv)存储到本地目录,然后整体读取,再以邮件形式发送,很麻烦。关键是字典的规范使用无法掌握,所以程序有点臃肿 csvFile = open(r"weather.csv", 'w+') #如果csv数据带有空格,读取容易出错,格式不统一 writer = csv.writer(csvFile) subkeys = ['日期', '天气', '气温', '风速'] writer.writerow(subkeys) weather = {} i = 0 for tt in days[0:7]: #七天的天气,索取日期 weather['日期'] = days[i].get_text().replace("\n", " ") # 获取纯字符,并去掉换行符 # print(weather) for wea0 in wea: # print(wea0[i].get_text().replace("\n", " ")) weather['天气'] = wea[i].get_text().replace("\n", " ") for tem0 in tem: weather['气温'] = tem[i].get_text().replace("\n", " ") for win0 in win: weather['风速'] = ''.join(win[i].get_text().replace("\n", " ").split(' ')) #去掉文字中间空格 # print(weather) i += 1 aa = dict([(key, weather[key]) for key in subkeys]) # 按照固定顺序输出 writer.writerow(aa[key] for key in subkeys) # 挑选对应名单的行 csvFile.close() f = open(r"weather.csv", "r") lines = f.readlines() f.close() print(lines) # for key, value in weather.items(): # print(key, value) #print(weather_new) #print(type(weather)) #str_weather = str(weather_new) # dict 转为 str #print(str_weather) #print(type(str_weather)) sendMail("".join(lines), locate) # plan 1 随便写的,比较简单,但是发送内容比较乱、不美观。调试,邮箱都发爆了... weather1 = [] for tem in day1: weather1.append(tem.get_text().replace("\n", " ")) # 将换行转为空格 weather1.append("\r\n") #print(weather1) #print(type(weather1)) str_weather1 = "".join(weather1) # list 转为 str #print(str_weather1) #print(type(str_weather1)) sendMail(str_weather1, locate)
结果(两个版本比较):

plan 0

plan 1


浙公网安备 33010602011771号