6月17日22分25分,四川省宜宾市长宁县发生了6.0级地震,成都高新减灾研究所与应急管理部门联合建设的大陆地震预警网成功预警本次地震,提前10秒向宜宾市预警,提前61秒向成都预警。
虽然自己还不能写出这么牛逼的系统,但是今天我想结合自己学到的Python知识,用Python获取地震信息,然后微信实时推送给你的群组或你的朋友。
1.前期准备
1.爬虫基本知识,比如requests库,以及lxml库;
2.利用Xpath进行HTML的解析;
之前写的一些简单项目,提取页面信息时使用的是正则表达式,但当项目复杂时,用正则表达式比较烦琐,万一有地方写错了,可能导致匹配失败,所以使用正则表达式提取页面信息多多少少还是有些不方便。
通过最近学习,我知道了在网页中可以通过Xpath或CSS选择器来定位一个或多个节点,再调用相应的方法获取它的正文内容或者属性,可以很方便快捷的提取到我们想要的信息。
3.要实现微信实时推送肯定需要用到wxpy库;
4.本次项目从中国地震台网爬取地震信息,链接为: http:// news.ceic.ac.cn/index.h tml?time= {int(time.time())}。
2.代码整合
import requests, time from lxml import etree from wxpy import * # 微信登陆 bot = Bot() # 查找好友 my_friend = bot.friends().search(u'stormwen')[0] # 写自己的讨论组名称 with open('log.txt', 'r') as f: rember = f.readline() headers = { 'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36', 'cookie': 'Hm_lvt_e0025cd5d352165f8a646ccea5beb27d=1543211803; Hm_lpvt_e0025cd5d352165f8a646ccea5beb27d=1543211803', } while True: try: url = f'http://news.ceic.ac.cn/index.html?time={int(time.time())}' # 请求数据 res = requests.get(url, headers=headers).text.encode('ISO-8859-1').decode('utf8') html_ele = etree.HTML(res) # 返回列表 res = html_ele.xpath('//*[@id="news"]//td//text()') # 如果日志为空,发送最新的一条地震信息 if rember == '': msg = f'北京时间:{res[1]},在纬度:{res[2]} ,经度{res[3]} 处发生了{res[0]}级地震,震源深度{res[4]}千米,参考位置:{res[5]}(5分钟更新一次)' # 发送信息 my_friend.send(msg) print('日志为空,msg:', msg) # 如果日志非空,就判断是否是最新的,发送日志之后的所有新的数据 else: i = res.index(rember) while i > 1: i -= 6 msg = f'北京时间:{res[i]},在纬度:{res[i+1]} ,经度{res[i+2]} 处发生了{res[i-1]}级地震,震源深度{res[i+3]}千米,参考位置:{res[i+4]}(5分钟更新一次)' # 发送信息 my_friend.send(msg) print('日志非空,msg:', msg) time.sleep(300) rember = res[1] # 更新日志(记录最新发送的地震信息) with open('log.txt', 'w') as f: f.write(res[1]) except: time.sleep(60)
3.结果展示
4.总结
我一直认为语言只是工具,只有用它来做点具体的事,才体现出它的价值。今天这个项目用到了Python的爬虫知识,没有用大家讨厌的正则表达式,而是用一种新的方式解析库,实现对HTML的解析和提取信息,最后又用到前面项目用过的wxpy库,实现了全部功能。
以上所述是小编给大家介绍的使用python获取(宜宾市地震信息)地震信息,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
Since 10.0.18 getCurrentLocation 新接口 getCurrentLocation 获取当前设备所在的地理位置信息,包括经纬度、准确度、逆地理编码、POI地址等,与此前 getLocation 老接口的参数和错误码定义 不 兼 容 ! 使用方法 AlipayJSBridge.call('getCurrentLocation', { cacheTimeout, req
Spring的架构中的很多层面都提供了对国际化的支持,同样支持Spring MVC框架也能提供。DispatcherServlet为你提供了自动使用用户的地区信息来解析消息的能力。而这,是通过LocaleResolver对象来完成的。 一个请求进入处理时,DispatcherServlet会查找一个地区解析器。如果找到,就尝试使用它来设置地区相关的信息。通过调用RequestContext.get
GeoJSON MongoDB 支持以下类型的 GeoJSON 对象类型: 点(Point) 线(LineString) 多边形(Polygon) 多点(MultiPoint) 多线 多个多边形 几何集合
ap.getLocation(OPTION, CALLBACK) 获取当前的地理位置信息。 OPTION 参数说明 名称 类型 必填 描述 cacheTimeout Number 否 钱包经纬度定位缓存过期时间,单位秒。默认 30s。使用缓存会加快定位速度,缓存过期会重新定位 type Number 否 支持 0:详细逆地理编码,带周边信;1:逆地理编码到城市;2:仅获取经纬度、速度和精度。默认为
问题内容: 我需要获取在什么环境下运行该软件的信息。python是否有用于此目的的库? 我想知道以下信息。 操作系统名称/版本 CPU名称,时钟速度 CPU核数 记忆体大小 问题答案: 其中一些可以从模块中获得:
// axios 响应拦截 axiosInstance.interceptors.response.use( (res) => { 只打印出下面的数据, 实际上接口headers 返回了很多数据,为什么其他数据获取不到,如Access-Token属性?