|
本帖最后由 lyy-cy 于 2019-8-20 23:49 编辑
原来用的是心知天气的API,数据比较少,看了一个帖子,试了试用正则模块可以解析出天气数据了。
先在winPython下测试成功了。贴出源码,给大家参考。
灵感来源:
https://www.mydigit.cn/forum.php?mod=viewthread&tid=63347
那就试试这个,看看返回数据量是否超标 (标红部分改为你要的地名的拼音)
http://i.tianqi.com/index.php?c=code&a=getcode&id=83&py=mentougou

返回数据:(标红部分是你要的数据)
源码:
- import requests
- url='http://i.tianqi.com/index.php?c=code&a=getcode&id=55&py=haizhuqu'
- headers = {
- "Uset-Agent":r"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.106 BIDUBrowser/8.7 Safari/537.36",
- "Accept-Language":r"zh-CN,zh;q=0.8"
- }
- def getPage(url):
- "取得列表页面数据,并转码输出"
- try:
- wbDate=requests.get(url,headers=headers)#直接用requests.get(url,data)即可,其中.get表示为get方法,不需要对字典类型的data进行处理
- wbDate.encoding = "utf-8" #手动指定编码方式
- reTxt=wbDate.text #text方法是获取到响应为一个str,也不需要对res进行转换等处理
- print ("获取页面OK")
- return reTxt
- except:
- print("获取页面失败,等待5秒后重试")
- import time
- time.sleep(5)
- getPage(url)#试一试递归,可以用
- import re
- content = getPage(url)
- #------------------------------------------------------------------------分隔符
- Aa1 =r"正则输出开始"
- print(f"{'_':_>60}{Aa1:_<40}{'_':_>10}\n")
- #------------------------------------------------------------------------分隔符
- print('获取title 方法一')
- title_pat = r'(?<=<title>).*?(?=</title>)'
- title_ex = re.compile(title_pat,re.M|re.S)
- title_obj = re.search(title_ex, content)
- title = title_obj.group()
- print (title)
-
- print('获取title 方法二')
- title = re.findall(r'<title>(.*?)</title>', content)
- print (title)
- print('农历')
- # r'<li class="t3">08/19 己亥年七月十九</li>' 这是是原文的串
- _pat = r'<li class="t3">(.*?)</li>'
- _ex = re.compile(_pat,re.M|re.S)
- nongli = re.findall(_ex, content)
- print (nongli)
- print('天气')
- # r'<span style="font-size:14px;width: 70px;line-height: 18px;height: 18px;overflow: hidden;">雷阵雨</span> 这是是原文的串
- _pat = r'height: 18px;overflow: hidden;">(.*?)</span>'
- _ex = re.compile(_pat,re.M|re.S)
- tianqi = re.findall(_ex, content)
- print (tianqi)
- print('温度')
- # r'<h5><span class="f1">27</span>~<span class="f2">34</span></h5>' 这是是原文的串
- title_pat = r'<h5><span class="f1">(.*?)</span>~<span class="f2">(.*?)</span></h5>'
- title_ex = re.compile(title_pat,re.M|re.S)
- wendu = re.findall(title_ex, content)
- print (wendu)
- print('指数')
- # r'height:36px"><h4>晨练指数</h4><p>不宜</p></a></div>' 这是是原文的串
- _pat = r'height:36px"><h4>(.*?)</h4><p>(.*?)</p></a></div>'
- _ex = re.compile(_pat,re.M|re.S)
- zhushui = re.findall(_ex, content)
- print (zhushui)
- print('说明')
- # r'haizhuqu/?tq" title="紫外线强度很弱,建议出门前涂擦SPF在6-7之间、PA+的防晒护肤品。"><img class="pic" src=' 这是是原文的串
- _pat = r'<div class="tab"><a target="_blank" href="http://guangzhou.tianqi.com/haizhuqu/?tq" title=(.*?)><img class="pic" src='
- _ex = re.compile(_pat,re.M|re.S)
- shuom = re.findall(_ex, content)
- print (shuom)
复制代码
输出,虽然不完美,基本能用了
- 获取页面OK
- ____________________________________________________________正则输出开始____________________________________________
- 获取title 方法一
- 海珠天气预报代码调用
- 获取title 方法二
- ['海珠天气预报代码调用']
- 农历
- ['08/20 己亥年七月二十']
- 天气
- ['雷阵雨']
- 温度
- [('27', '34')]
- 指数
- [('紫外线指数', '中等'), ('穿衣指数', '炎热'), ('晾晒指数', '不适宜'), ('旅游指数', '不适宜'), ('晨练指数', '不宜'), ('洗车指数', '不宜')]
- 说明
- []
- [Finished in 0.7s]
复制代码 参考网址,按照要求,对原作者表示感谢!版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Eastmount/article/details/51082253
————————————————
版权声明:本文为CSDN博主「Eastmount」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Eastmount/article/details/51082253
将上面代码,写入esp32成功(当然做了相应修改),得到了天气数据,连农历都有了,并且在OLED成功显示了。- import network
- import time
- MY_SSID = "home888"
- MY_PASSWORD = "12345678"
- def do_connect(essid,password):
- import network
- wlan = network.WLAN(network.STA_IF)
- wlan.active(True)
- if not wlan.isconnected():
- print('connecting to network...')
- wlan.connect(essid,password)
- time.sleep(10) # 连接有延时,睡眠10秒
- print('network config:', wlan.ifconfig())
- return wlan.isconnected()
- def dis_connect():
- import network
- wlan = network.WLAN(network.STA_IF)
- wlan.active(False)
- print('network config:', wlan.ifconfig())
- do_connect(MY_SSID,MY_PASSWORD)
- import urequests
- url='http://i.tianqi.com/index.php?c=code&a=getcode&id=55&py=haizhuqu'
- r = urequests.get(url) # 发起HTTP的GET请求
- content = r.text
- import ure as re
- print('农历')
- nongli = re.search(r'<li class="t3">(.*?)</li>', content)
- nongli = nongli.group(1)
- print (nongli)
- print('天气')
- # r'<span style="font-size:14px;width: 70px;line-height: 18px;height: 18px;overflow: hidden;">雷阵雨</span> 这是是原文的串
- tianqi = re.search(r'height: 18px;overflow: hidden;">(.*?)</span>', content)
- tianqi = tianqi.group(1)
- print (tianqi)
- print('温度')
- # r'<h5><span class="f1">27</span>~<span class="f2">34</span></h5>' 这是是原文的串
- wendu = re.search(r'<h5><span class="f1">(.*?)</span>~<span class="f2">(.*?)</span></h5>', content)
- wendua = wendu.group(1)
- wendub = wendu.group(2)
- print (wendua,wendub)
- print('指数')
- zhushui = re.search(r'height:36px"><h4>(.*?)</h4><p>(.*?)</p></a></div>', content)
- zhushuia = zhushui.group(1)
- zhushuib = zhushui.group(2)
- print (zhushuia,zhushuib)
复制代码 输出
- [0;32mI (22216) phy: phy_version: 4100, 2a5dd04, Jan 23 2019, 21:00:07, 0, 0[0m
- connecting to network...
- network config: ('192.168.8.104', '255.255.255.0', '192.168.8.1', '192.168.8.1')
- 农历
- 08/20 己亥年七月二十
- 天气
- 多云
- 温度
- 26 33
- 指数
- 紫外线指数 中等
复制代码
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
打赏
-
查看全部打赏
|