效果展示
- 打包成exe文件之后的效果
- 选择城市
- 选择好友(可以对群组发送消息,群组需要先添加到微信通讯录中)
- 选择发送天气预报的频率
- 选择开启自动回复功能
功能实现思路
1、爬取天气信息
- 天气信息获取网站:中国天气网
- http://www.weather.com.cn/ 网站后面拼接上
weather/{city_code}.shtml
,可以获取到指定城市的天气情况(西安 天气ID:101110101) - 城市天气ID获取,自己百度查找,本篇博客代码内部也有
- 西安的天气页面完整链接:http://www.weather.com.cn/weather/101110101.shtml
- 获取到页面之后,通过xpath获取需要的天气内容(使用xpath时尽量用标签的ID获取需要的信息,防止网站样式变化,影响获取值,需要频繁修改爬虫)
- 将爬虫获取到天气信息,组装成字符串,方便微信发送
- http://www.weather.com.cn/ 网站后面拼接上
二、微信发送信息
- 应用模块
wxpy
,python操作微信的模块- 安装方式:
pip install wxpy
- 实例化对象,扫描登录
- 给指定好友或者群组发送天气信息
- 对好友或者群组设置自动回复(使用图灵机器人自动回复)
- 安装方式:
三、tkinter模块添加GUI图形化界面
- tkinter模块使用详细资料自己百度查询,这里就不多叙述
四、打包exe文件
pyinstaller
模块 打包详解- 打包完成成品文件
话不多说上代码
# -*- coding: utf-8 -*-
# @Time : 2019/3/22 21:53
# @Author : cd
from tkinter import ttk
import tkinter as tk
import requests
from lxml import etree
from wxpy import *
# 这里可以把天气ID字典放到别的文件中引入,这个随便都可以
weatherCode = {
'北京': '101010100', '海淀': '101010200', '朝阳': '101071201', '顺义': '101010400', '怀柔': '101010500',
'通州': '101010600', '昌平': '101010700', '延庆': '101010800', '丰台': '101010900', '石景山': '101011000',
'大兴': '101011100', '房山': '101011200', '密云': '101011300', '门头沟': '101011400', '平谷': '101011500',
'上海': '101020100', '闵行': '101020200', '宝山': '101020300', '嘉定': '101020500', '浦东南汇': '101020600',
'金山': '101020700', '青浦': '101020800', '松江': '101020900', '奉贤': '101021000', '崇明': '101021100',
'徐家汇': '101021200', '浦东': '101021300', '天津': '101030100', '武清': '101030200', '宝坻': '101030300',
'东丽': '101030400', '西青': '101030500', '北辰': '101030600', '宁河': '101030700', '汉沽': '101030800',
'静海': '101030900', '津南': '101031000', '塘沽': '101031100', '大港': '101031200', '蓟县': '101031400',
'重庆': '101040100', '永川': '101040200', '合川': '101040300', '南川': '101040400', '江津': '101040500',
'万盛': '101040600', '渝北': '101040700', '北碚': '101040800', '巴南': '101040900', '长寿': '101041000',
'黔江': '101041100', '万州': '101041300', '涪陵': '101041400', '开县': '101041500', '城口': '101041600',
'云阳': '101041700', '巫溪': '101041800', '奉节': '101041900', '巫山': '101042000', '潼南': '101042100',
'垫江': '101042200', '梁平': '101042300', '忠县': '101042400', '石柱': '101042500', '大足': '101042600',
'荣昌': '101042700', '铜梁': '101042800', '璧山': '101042900', '丰都': '101043000', '武隆': '101043100',
'彭水': '101043200', '綦江': '101043300', '酉阳': '101043400', '秀山': '101043600', '哈尔滨': '101050101',
'双城': '101050102', '呼兰': '101050103', '阿城': '101050104', '宾县': '101050105', '依兰': '101050106',
'巴彦': '101050107', '通河': '101050108', '方正': '101050109', '延寿': '101050110', '尚志': '101050111',
'五常': '101050112', '木兰': '101050113', '齐齐哈尔': '101050201', '讷河': '101050202', '龙江': '101050203',
'甘南': '101050204', '富裕': '101050205', '依安': '101050206', '拜泉': '101050207', '克山': '101050208',
'克东': '101050209', '泰来': '101050210', '牡丹江': '101050301', '海林': '101050302', '穆棱': '101050303',
'林口': '101050304', '绥芬河': '101050305', '宁安': '101050306', '东宁': '101050307', '佳木斯': '101050401',
'汤原': '101050402', '抚远': '101050403', '桦川': '101050404', '桦南': '101050405', '同江': '101050406',
'富锦': '101050407', '绥化': '101050501', '肇东': '101050502', '安达': '101050503', '海伦': '101050504',
'明水': '101050505', '望奎': '101050506', '兰西': '101050507', '青冈': '101050508', '庆安': '101050509',
'绥棱': '101050510', '黑河': '101050601', '嫩江': '101050602', '孙吴': '101050603', '逊克': '101050604',
'五大连池': '101050605', '北安': '101050606', '大兴安岭': '101050701', '塔河': '101050702', '漠河': '101050703',
'呼玛': '101050704', '呼中': '101050705', '新林': '101050706', '加格达奇': '101050708', '伊春': '101050801',
'乌伊岭': '101050802', '五营': '101050803', '铁力': '101050804', '嘉荫': '101050805', '大庆': '101050901',
'林甸': '101050902', '肇州': '101050903', '肇源': '101050904', '杜尔伯特': '101050905', '七台河': '101051002',
'勃利': '101051003', '鸡西': '101051101', '虎林': '101051102', '密山': '101051103', '鸡东': '101051104',
'鹤岗': '101051201', '绥滨': '101051202', '萝北': '101051203', '双鸭山': '101051301', '集贤': '101051302',
'宝清': '101051303', '饶河': '101051304', '友谊': '101051305', '长春': '101060101', '农安': '101060102',
'德惠': '101060103', '九台': '101060104', '榆树': '101060105', '双阳': '101060106', '吉林': '101060201',
'舒兰': '101060202', '永吉': '101060203', '蛟河': '101060204', '磐石': '101060205', '桦甸': '101060206',
'延吉': '101060301', '敦化': '101060302', '安图': '101060303', '汪清': '101060304', '和龙': '101060305',
'龙井': '101060307', '珲春': '101060308', '图们': '101060309', '四平': '101060401', '双辽': '101060402',
'梨树': '101060403', '公主岭': '101060404', '伊通': '101060405', '通化': '101060501', '梅河口': '101060502',
'柳河': '101060503', '辉南': '101060504', '集安': '101060505', '通化县': '101060506', '白城': '101060601',
'洮南': '101060602', '大安': '101060603', '镇赉': '101060604', '通榆': '101060605', '辽源': '101060701',
'东丰': '101060702', '东辽': '101060703', '松原': '101060801', '乾安': '101060802', '前郭': '101060803',
'长岭': '101060804', '扶余': '101060805', '白山': '101060901', '靖宇': '101060902', '临江': '101060903',
'东岗': '101060904', '长白': '101060905', '抚松': '101060906',