江苏品牌网站设计,新网站排名优化,网站设计怎么写,江苏省住房和城乡建设厅网站文章目录 一、概要二、效果演示三、代码讲解3.1 爬虫采集行政处罚数据3.2 存MySQL数据库3.3 发送告警邮件微信通知3.4 定时机制 四、总结 一、概要
您好#xff01;我是马哥python说#xff0c;一名10年程序猿。
我原创开发了一套定时自动化爬取方案#xff0c;完整开… 文章目录 一、概要二、效果演示三、代码讲解3.1 爬虫采集行政处罚数据3.2 存MySQL数据库3.3 发送告警邮件微信通知3.4 定时机制 四、总结 一、概要
您好我是马哥python说一名10年程序猿。
我原创开发了一套定时自动化爬取方案完整开发流程如下 采集数据 - 筛选数据 - 存MySQL数据库 - 发送邮件 - 微信提醒 - 定时执行 如果您现在苦于每天繁琐、重复的数据采集工作可尝试套用该自动化方案节省人力降本增效
二、效果演示
基于数据隐私保护部分数据已脱敏。
图2.1 MySQL数据库结果部分数据已脱敏
图2.2 Excel结果部分数据已脱敏
图2.3 微信消息提醒
图2.4 收件箱告警邮件
图2.5 邮件正文内容部分数据已脱敏
以上。
三、代码讲解
3.1 爬虫采集行政处罚数据
爬取目标是某公示平台的行政处罚数据。
通过浏览器的开发者模式分析接口页面显示数据与接口返回数据一致故可通过爬取接口的方式采集。 图3.1 开发者模式
首先导入需要用到的库
import requests # 发送请求
import pandas as pd # 存取csv
import os # 判断本地文件
import random # 随机
from time import sleep # 等待时长防止反爬
from sqlalchemy import create_engine # 连接数据库
import json # 转换数据格式然后定义请求头真实地址已脱敏
# 请求头
headers {Accept: application/json, text/javascript, */*; q0.01,Accept-Encoding: gzip, deflate, br,Accept-Language: zh-CN,zh;q0.9,en-US;q0.8,en;q0.7,Connection: keep-alive,Content-Type: application/json;charsetUTF-8,Cookie: 换成自己的cookie,Host: xxx,Origin: xxx,Referer: xxx,sec-ch-ua: Chromium;v112, Google Chrome;v112, Not:A-Brand;v99,sec-ch-ua-mobile: ?0,sec-ch-ua-platform: macOS,Sec-Fetch-Dest: empty,Sec-Fetch-Mode: cors,Sec-Fetch-Site: same-origin,User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36,X-Requested-With: XMLHttpRequest
}定义请求参数即开发者中的payload参数不再展示。
发送post请求并接收返回数据
# 发送post请求
r requests.post(url, headersheaders, datajson.dumps(data))
# 查看响应码
print(r.status_code)
# json解析数据
resp_json r.json()
data_list resp_json[data][list]逐个解析返回数据以处罚金额为例
for data in data_list:# 处罚金额punish_amount data[f_2022118615143]try:if float(punish_amount) threshold: # 如果超过告警阈值就存入数据punish_amount_list.append(punish_amount)else: # 否则进入下一轮循环continueexcept:continue这里解释一下如果处罚金额超过事先设定好的阈值则存入数据否则不存continue进入下一轮循环由此达成告警的目的。
其他字段案件名称、处罚人姓名、处罚日期、处罚机关等同理不再赘述代码。
最后是保存数据到csv文件
# 保存数据到Dataframe
df pd.DataFrame({页码: page,案件名称: case_name_list,处罚人姓名: punish_name_list,处罚金额: punish_amount_list,处罚日期: punish_time_list,处罚机关: punish_org_list,}
)
# 保存到csv文件
df.to_csv(result_file, modea, headerheader, indexFalse, encodingutf_8_sig)数据存入csv效果查看图2.2。
3.2 存MySQL数据库
如上所述数据保存到csv文件作为临时存储下面保存到MySQL数据库作为持久性存储。
我采用sqlalchemy和pandas的to_sql结合的方式把csv数据快速导入MySQL数据库。
关键代码真实信息已脱敏
# 创建MySQL数据库连接
engine create_engine(mysqlpymysql://用户名:密码IP地址/数据库名)
# 读取csv数据
df_punish pd.read_csv(result_file)
# 把csv数据导入MySQL数据库
df_punish.to_sql(nametable_name, conengine, chunksize1000, if_existsreplace, indexFalse)
print(导入数据库完成)这样的简单3行代码即实现了csv数据导入MySQL数据库的目的。
注意to_sql中的if_exists代表如果表中存在数据那么replace覆盖原始数据这样不会产生重复数据。当然也可以加个ist_time插入时间的区分字段这样可以把if_exists设置为append保证每次爬取都留痕你可以试试我认为这样代码更完善、效果更好。
数据入库效果查看图2.1。
3.3 发送告警邮件微信通知
自动发送邮件我采用zmail库实现。
关键代码真实信息已脱敏
def send_email(v_location, v_content):# 当前时间戳now datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S)# 设置邮件信息mail_content {subject: 税务行政处罚预警邮件 | {} | {}.format(v_location, now), # 邮件标题content_text: 尊敬的管理员您好\n\n以下是【{}】税务行政处罚预警名单请注意查收。\n\n.format(v_location) v_content # 邮件内容}# 发件人的用户名和密码server zmail.server(xxxqq.com, xxx) # 发件人# 发送邮件server.send_mail(xxxqq.com, mail_content) # 收件人print(邮件已发送完毕:, v_location)注意发件人的smtp服务必须开启否则会邮件发送失败如下 图3.2 邮箱开启smtp服务
邮件收到了怎么实现的微信通知呢秘密就是把微信的邮件功能打开如下 图3.3 微信设置 微信我 - 设置 - 通用 - 辅助功能 - QQ邮箱提醒 - 开启功能 这样就能让微信收到消息提醒了效果如图2.3所示。
多说一句请勿尝试用itchat、wxpy等第三方库操作微信微信官方已停用这类工具且存在封号风险不信你就逝世[手动狗头]
3.4 定时机制
定时执行也是采用简单粗暴的方式直接os.system调用分别的py文件死循环加sleep的方式
while True:# 执行爬虫print(get_now(), 开始爬虫)os.system(python 爬虫.py)print(get_now(), 爬取结束)sleep(1)# 发邮件print(get_now(), 开始发预警邮件)os.system(python 发预警邮件.py)print(get_now(), 结束发预警邮件)sleep(1)# 等待时长60分钟print(get_now(), 开始等待60分钟..)sleep(3600)这样程序只要在后台一直运行就好了每隔3600秒即1小时自动执行一次可自定义设置间隔时长。
最终得到的效果就是每隔1小时微信收到一次消息通知效果如图2.3所示。
四、总结
这套定时采集通知方案全流程均由本人原创开发可套用到类似业务需求上其中部分环节可根据需要扩展相关功能。请小伙伴们打开脑洞码上开发
如文中所说部分信息涉及隐私保护所以不提供完整代码有类似需求的小伙伴可私信讨论。 我是马哥python说一名10年程序猿持续分享Python干货中