# -*- coding: utf-8 -*- ''' 获取天气预报 ''' import os import sys sys.path.append(os.path.join(os.getcwd().split('auto_news_scheduler')[0], 'auto_news_scheduler')) import time from datetime import datetime import httpx from bs4 import BeautifulSoup from tools_logs_handle import LogsHandle from tools_send_email import SendEmail class Weather(): def __init__(self): self.email_subject = '天气预报' self.email_title = 'Weather forecast' self.email_text = '获取数据时间:\n{0}\n{1}\n\n\n\n'.format(datetime.now().strftime("%Y-%m-%d %H:%M:%S"), ('-' * 90)) self.logs_handle = LogsHandle() self.now_day = time.strftime('%Y-%m-%d', time.localtime()) def main(self): self.logs_handle.logs_write('Weather forecast', '开始获取天气预报数据', 'start', False) try: area_code = '59287' one_week = [ '/tomorrow-%s.htm' % area_code, '/third-%s.htm' % area_code, '/fourth-%s.htm' % area_code, '/fifth-%s.htm' % area_code, '/sixth-%s.htm' % area_code, '/seventh-%s.htm' % area_code, ] url = "https://tianqi.2345.com/today-%s.htm" % area_code header = { 'User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; Media Center PC 6.0; InfoPath.2; MS-RTC LM 8' } response = httpx.get(url=url, headers=header) # 增加headers参数,简单伪装UA response.encoding = "utf-8" bs = BeautifulSoup(response.text, 'html.parser') # 这里我们用html.parser解析器 one_week_weather = [] for week in one_week: a = bs.find_all('a', href=week) # 查找对应元素 a = ' '.join(a[0].text.split()) one_week_weather.append(a) except Exception as e: print(e) self.logs_handle.logs_write('Weather forecast', e, 'error', False) exit(0) subject = "天气预报" title = "weather" text = "天气预报: {}获取并发送\n\n".format(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())) + '\n\n'.join(one_week_weather) S = SendEmail(subject=subject, title=title, text=text) S.send() self.logs_handle.logs_write('Weather forecast', '天气预报数据已获取', 'done', False) # if __name__ == "__main__": # L = LogsHandle() # L.logs_write('Weather forecast', '开始获取天气预报数据', 'start', False) # W = Weather() # W.main() # L.logs_write('Weather forecast', '天气预报数据已获取', 'done', False)