【Python爬虫(一)】爬虫前置问题总结
文章内容部分来自Chatgpt。
了解网站的访问限制
当您想要获取某个网站的数据的时候总要知道一些网站的规则吧,要不然(IP,账号)怎么被封的都不知道。
一般网站会限制什么
访问频率限制:就是控制服务器的负载,防止服务器崩掉
相应的测试:逐渐增加自己的访问频率,观察是否出现访问被限制的情况。最开始可以以较低的访问频率进行测试,例如每分钟只访问一次,然后逐渐增加访问频率。如果在某个阶段发生了访问限制,那么该阶段的访问频率就是网站的限制阈值。
解决方案:控制爬虫的访问频率。
IP地址限制:限制IP
测试:使用不同的IP地址进行访问,观察是否出现了访问被限制的情况。可以通过使用代理服务器或者虚拟专用网络(VPN)来切换IP地址,以模拟不同的访问来源。如果使用不同的IP地址进行访问时出现了访问限制,那么网站可能对IP地址进行了限制。
解决方案:使用proxy远程代理(VPN),或者使用虚拟机。
如何查看自己被ban了
访问错误提示:观察访问被限制时的错误提示信息。有些网站会返回特定的HTTP状态码或者错误信息来指示访问被限制,例如403 Forbidden、429 Too ...
【PythonScript(二)】脚本解析-续
今天只看了一部分,主要还是有关以连接数据库的一部分代码。
Python代码写的还是比较6的,很多东西我是可能写不粗来,不过能看懂,加上之前自己写过工具类,这里大差不差,无非就是表名,数据库名,一些逻辑发生了变化,这里简单记录一下。
当然代码量是比较大的,先从工具类开始记录。
DBHandler数据库工具类
这个类的作用就是连接MySQL数据库,然后在实例化对象之后就可以对MySQL数据库做一些增删改查之类的操作了。
以下方法都需要有日志的产生,所以后面会阐述日志工具类。
关闭连接方法- close方法
将查询到的数据转为DownloadModel对象- query_for_download方法
向表中插入当前时间的数据- update_download_info方法
更新表中时间- update_business_time方法
将查询到的结果封装成一个ExecutorModel对象- query_for_operation方法
更新数据表business_rule_operation中update_time字段和操作人 - update_for_operation方法
更新表bu ...
保留近7天文件且清理旧文件
清理旧文件的脚本
清理(Linux)本地文件,防止磁盘撑爆;此脚本经过测试没问题。
测试截图:(在有Python解释器的服务器上测试就行)
同时在清理文件的基础上添加了删除空文件夹的一个逻辑,代码很简单。
这个脚本需要配合Azkaban或者Oozie或者DS进行调度,才能达到定时清理旧文件的目的。
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455# 保留最近7天的文件(linux本地文件 & 递归遍历)import osimport timeimport sys# 定义全局变量接收用户传入的参数,args为列表,args[0]为文件名args = sys.argvdef delete_old_files(directory): """ 传入给定文件目录,删除该目录下时间超过7天的文件,后续会产生空文件夹 :param directory: 要进行处理的文件目录 :ret ...
【PythonScript(一)】脚本解析
Python脚本解析和KeyPoint
接触到的第一个脚本,实际开发周期为一周时间。
脚本的功能已经在代码之前贴上了。
其实这里的Python脚本无非就是用到了一些第三方类库,比如HDFS,Redis,FTP文件服务,还有比如说文件,文件的遍历什么的,把这些东西搞懂这些Python代码基本就没有什么问题了。
手动总结一下:
HDFS相关
首先必须安装HDFS
12345678910# 不指定版本号安装pip install hdfs# 指定版本号安装pip install hdfs==2.7.0# 首先导入hdfs或者from hdfs import InsecureClientimport hdfshdfs_url = 'http://172.17.4.9:9870'
后续操作
创建HDFS连接对象,相当于pymysql中的conn连接对象:link = InsecureClient(hdfs_url)
获取HDFS路径下的所有文件和目录,返回值是一个列表:link.list(path)
创建文件夹:link.makedirs(path)
写文件:link. ...
项目全流程
项目透析
https://www.mubu.com/doc/6pyW5wz3yYq
【FLink教育】Hudi整合Hive实现湖仓一体
数据湖简介数仓和数据湖数据仓库数据仓库(英语:Data Warehouse,简称数仓、DW),是一个用于存储、分析、报告的数据系统。
数据仓库的目的是构建面向分析的集成化数据环境,分析结果为企业提供决策支持(DecisionSupport)。
数据仓库的特点是本身不产生数据,也不最终消费数据。
每个企业根据自己的业务需求可以分成不同的层次。但是最基础的分层思想,理论上分为三个层:操作型数据层(ODS)、数据仓库层(DW)和数据应用层(DA)。
数据湖数据湖是一个集中式数据存储库,用来存储大量的原始数据,使用平面架构来存储数据。
数据湖一个以原始格式(通常是对象块或文件)存储数据的系统或存储库,通常是所有企业数据的单一存储。
数据湖可以包括来自关系数据库的结构化数据(行和列)、半结构化数据(CSV、日志、XML、JSON)、非结构化数据(电子邮件、文档、pdf)和二进制数据(图像、音频、视频)。
数据湖中数据,用于报告、可视化、高级分析和机器学习等任务。
数据仓库VS数据湖
湖仓一体
湖仓一体(LakeHouse):是新出现的一种数据架构,它同时吸收了数据仓库和数据湖的 ...
【FLink教育】FlinkCDC介绍&集成Hive
之前已经聊过了目前市面上常用的一些架构及技术选型。
传统数据入仓 - 离线方向
MySQL→Sqoop→HDFS→Hive
传统数据入仓架构 1.0,主要使用 DataX 或 Sqoop 全量同步到 HDFS,再围绕 Hive 做数仓。
此方案存在诸多缺陷:容易影响业务稳定性,因为每天都需要从业务表里查询数据;天级别的产出导致时效性差,延迟高;如果将调度间隔调成几分钟一次,则会对源库造成非常大的压力;扩展性差,业务规模扩大后极易出现性能瓶颈。
传统数仓2.0 - 增加实时方向(Canal、dataX实时采集增量数据到Kafka上再Sink到HDFS上,最后增量全量做合并,最终还是围绕Hive)
分为实时和离线两条链路,实时链路做增量同步,比如通过 Canal 同步到 Kafka 后再做实时回流;
全量同步一般只做一次,与每天的增量在 HDFS 上做定时合并,最后导入到 Hive 数仓里。
此方式只做一次全量同步,因此基本不影响业务稳定性,但是增量同步有定时回流,一般只能保持在小时和天级别,因此它的时效性也比较低。同时,全量与增量两条链路是割裂的,意味着链路多,需要维护的组件 ...
【FLink教育】Flink技术选型
传统方案传统数据集成方案的痛点
大数据技术的应用可以从海量的用户行为数据中进行挖掘分析,根据分析结果优化平台的服务质量,最终满足用户的需求。大数据分析平台就是将大数据技术应用于教育培训领域,为企业经营提供数据支撑:
建立集团数据仓库,统一集团数据中心,把分散的业务数据进行预先处理和存储。
根据业务分析需要,从海量的用户行为数据中进行挖掘分析,定制多维的数据集合,形成数据集市,供各个场景主题使用。
前端业务数据展示选择和控制,选取合适的前端数据统计、分析结果展示工具。
-
上图为传统数据入仓架构 1.0,主要使用 DataX 或 Sqoop 全量同步到 HDFS,再围绕 Hive 做数仓。
此方案存在诸多缺陷:容易影响业务稳定性,因为每天都需要从业务表里查询数据;天级别的产出导致时效性差,延迟高;如果将调度间隔调成几分钟一次,则会对源库造成非常大的压力;扩展性差,业务规模扩大后极易出现性能瓶颈。
上图为传统数据入仓 2.0 架构。分为实时和离线两条链路,实时链路做增量同步,比如通过 Canal 同步到 Kafka 后再做实时回流;全量同步一般只做一次,与每天的增量在 HDFS ...
ClickHouse全面解析
https://www.mubu.com/doc/Ud_30MJRFa
【Flink】FlinkSQL| 状态编程| 自定义函数
Flink 中的状态编程
在 Flink 中,算子任务可以分为无状态和有状态两种情况。
在传统的事务型处理架构中,这种额外的状态数据是保存在数据库中的。而对于实时流处理来说,这样做需要频繁读写外部数据库,如果数据规模非常大肯定就达不到性能要求了。所以 Flink 的解决方案是,将状态直接保存在内存中来保证性能,并通过分布式扩展来提高吞吐量。
有状态算子的一般处理流程:
算子任务接收到上游发来的数据;
获取当前状态;
根据业务逻辑进行计算,更新状态;
得到计算结果,输出发送到下游任务。
状态分类按照由 Flink 管理还是用户自行管理,状态可以分为原始状态 ( Raw State ) 和托管状态 (Managed State)。
原始状态:即用户自定义的 State。Flink 在做快照的时候,把整个 State 当做一个整体,需要开发者自己管理,使用 byte 数组来读写状态内容。
托管状态:是由 Flink 框架管理的 State,如 ValueState、ListState 等,其序列化和反序列化由 Flink 框架提供支持,无需用户感知、干预。通常在 DataStre ...
