栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

通过python爬取风险区域,并发送到手机上

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

通过python爬取风险区域,并发送到手机上

需求分析

昨天,我做了一个爬取最新疫情信息的爬虫程序,一个小伙伴和我说,“仙草哥哥,你这个功能还是只有新增,一点都不清晰。我需要回家,肯定是要知道哪些地区是风险区啊,你应该能够直接告诉我们哪些地方是风险区。”

我觉得这个小伙伴说的很对,这个功能确实也没什么困难的,只要在昨天的基础上进行简单的修改就可以了。不过呢,之前我还做了一期程序结果推送到邮箱上的文章,评论区有一位小伙伴和我说,他不用邮箱,希望我能够做一个能推送到微信上的程序,今天我们也帮助这位小伙伴一起来实现一下

实现分析

我们需要做的事情有两个,第一是爬取风险区域,第二是为微信推送信息,我们应该分别来解决这两个问题

怎么爬取风险区域呢?昨天的json信息中实际上已经包括了这部分内容,只是没有提取出来。首先通过循环,找到哪些地方有风险区域,如果有,就添加保存,如果没有就跳过不管,只要这样就可以完成了

# 添加地区的循环
for case in r["component"][0]["caseList"]:

    # 添加地区的风险区域的循环
	for d in case["subList"]:

        # 如果存在风险区
		if d["dangerousAreas"]["subList"]:
            danger_list.append(d["dangerousAreas"]["subList"])

那么剩下的问题就在于,如何实现将程序的结果推送到微信上了

传统微信推送

按照传统的方式,给微信发送消息,可以通过测试号的模板接口,首先我们要获得一个微信公众号的测试号

注册一个公众号的测试号应该不是什么困难的问题,进入地址注册一下就行了,这里就不多做介绍了,相信看我文章的小伙伴不会对这个有问题的,然后就是查阅腾讯给我们留的开发文档了

在开发文档的公众号页面,基础消息能力篇章中,有一个模板信息接口,里面有详细的使用方法。正常来说,在正式的公众号中,模板信息也是不可以乱发的,不过在测试号中相对而言就没有那么多限制,你可以比较随意的编辑你要发送的消息

 除了需要在地址中填写的access_token以外,还需要在post请求中保存几个关键的参数

参数touser:这个参数要填写接受者的openid,这个在公众平台的后台添加了用户以后,就可以拿到openid

参数template_id:这个参数是要在正式使用的时候选择一个模板,用于发送信息

参数data:这个参数就是用于填写你要发送的数据了,通过post请求把data数据带上,就能够将信息发送给对应的用户了

第三方微信推送

当然,以上的传统方式只是简单介绍一下而已,由于对于个人来说,为了推送一个消息,还要专门去注册一个测试号,然后去调用模板消息还是有一点麻烦了,使用起来也不是很方便,因此,更容易的办法是直接使用第三方的消息推送服务,只要简单的调用接口,就可以完成消息推送了,比如说,非常知名的server酱服务

注意:这不是广告啊,提到它单纯是因为其比较好用,出现的次数也很多,如果你喜欢其他服务的话,也可以选择

使用方法也是很简单的,说明也只有短短几句话而已

简单来说就是,注册账号就可以拿到一个sendkey,然后通过其留下的接口地址,直接发送一个请求,就可以完成功能了

至于这个接口呢,也比刚才更容易使用,不再需要post请求了,只需要发送一个get请求就可以了,正常来说应该是这么配置的

import requests

send_key = "" # 此处用于配置注册账号后的send_key
title = "" # 推送通知的标题
desp = "" # 需要推送通知的内容

url = f"https://sctapi.ftqq.com/{send_key}.send?title={title}&desp={desp}"

r = requests.get(url) # 如果不出意外的话,消息就已经推送成功了

比起自己使用微信的模板消息,直接使用现成的第三方服务确实是容易了很多

完整代码展示

以下是代码的第一部分,没有配置推送通知的

import requests
import re
import json
import base64
 
base_url = "aHR0cHM6Ly92b2ljZS5iYWlkdS5jb20vYWN0L25ld3BuZXVtb25pYS9uZXdwbmV1bW9uaWEv"
 
url = base64.b64decode(base_url)
 
headers = {"user-agent": "Mozilla/5.0"}
 
r = requests.get(url, headers=headers, timeout=10)
 
res = re.search('', r.text)
 
assert(res)
 
r = json.loads(res.group(1))

text = "数据更新时间:"
text += r["component"][0]["mapLastUpdatedTime"]
text += "nn"

for case in r["component"][0]["caseList"]:
	tmp = case["area"]
	for d in case["subList"]:
		if d["dangerousAreas"]["subList"]:
			text += tmp
			text += "-"
			text += d["city"]
			text += "n"
			for a in d["dangerousAreas"]["subList"]:
				text += a["area"]
				text += "("
				text += a["level"]
				text += ")"
				text += "n"
			text += "n"

print(text) # 注意,如果你不打算配置微信通知,那么到这里就可以结束了

以下是代码的第二部分,如果你需要配置推送通知,那么需要根据上边的注释,合理的配置信息,就可以完成消息推送

send_key = "" # 你自己的send_key
title = "" # 推送通知的标题,你也可以写一段代码,发送当前的时间

# 此处的内容是之前代码中获取到的风险区域
url = f"https://sctapi.ftqq.com/{send_key}.send?title={title}&desp={text}"

r = requests.get(url)

print(r.text)

由于该代码运行后会出现具体的地名和区域,我就不在此展示代码的运行结果了,你可以自行运行代码查看结果


完整代码展示中的第一部分,是任何时候都可以直接运行的,而代码的第二部分需要配置你自己的账号信息才能使用,因此不能直接复制,需要进行简单的修改

如需使用,直接将第二段代码复制到第一段之后即可

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/987617.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号