如果你不知道做什么,那就学一门杂学吧

news/2024/7/19 10:24:55 标签: python, 爬虫

多年以后,面对人工智能研究员那混乱不堪的代码,我会想起第一次和 S 君相见的那个遥远的下午。那时的 B 公司,还是一个仅有 6 个人的小团队,Mac 和显示器在桌上依次排开,大家坐在一起,不需要称呼姓名,转过脸去,对方就知道你在和他说话。一切看起来都那么美好,我们所有人,都希望自己和这个公司能够一起成长。

彼时 S 君刚从加拿大回来,老板把他介绍给我们,于是 S 君作为数据产品经理跟我有了项目上的接触。

创业公司里面,每一个人都需要会很多的技艺,于是 S 君开始自学 Python。

有一天,S 君问我:“你玩 MineCraft 吗?“

“玩,但我更喜欢在 B 站上看别人的世界。”我答道。

“我觉得我现在写程序,像是在玩我的世界。” S 君笑着说道。

“是不是觉得你已经掌握了 Python 的基本语法,看着别人把 Python 用的溜溜转,而你自己却不知道用它来做什么?”

“是这样的,你懂我。”

“那你学一门杂学吧。”

于是 S 君被我诱拐过来跟我一起写爬虫

后来,S 君离开了 B 公司。

三个月后,我也离开了。

从此,我们再也没有见过。

爬虫与三峡大坝

有一天,S 君兴冲冲地跑来跟我说:“我体会到三峡大坝的伟大功能了!”

“你是爬虫工程师还是水利工程师?”

“你知道吗,不管上游的水势多么凶猛,从大坝出来以后总是安全而稳定。” S 君并没有回答我的问题,而是自顾自地说道。

“原来你开始用 Kafka。不错,孺子可教。”

S 君吐了一下舌头:“还是师傅教导有方。”

前不久,S 君的爬虫刚刚达到了日产数据千万条的目标。然而他只高兴了一天。因为他发现,数据写到数据库以后,读起来很麻烦。

S 君有多个数据分析的系统需要从数据库里面读取爬虫爬好的数据,但是从每天千万量级的数据中寻找特定的数据是一个很慢的过程。如果程序遇到异常导致崩溃,又得从头开始读。

S 君问我:“现在我每一个数据分析的脚本都要从数据库里面读一次数据,做了太多重复的工作,单机单节点的数据库快要撑不住了。我是不是要去学习分库分表搭建集群啊?”

我告诉 S 君:“这个后面你自然是需要去做的。但现在,你可以先试一试 Kafka,我已经搭建好了一个 Kafka 的集群了,你这样使用……”。

后来,S 君让所有爬虫把爬到的数据到直接送进了 Kafka,然后再从 Kafka 里面读数据出来,一个 Group 用来备份原始数据,一份 Group 用来生成中间表,一份 Group 用来监控报警,一份 Group 用来绘制 DashBoard。无论爬虫塞给 Kafka 的数据有多少,有多快,从 Kafka 读数据的地方都能按照自己的节奏来消费和使用。

编程最重要的能力是变通

S 君是一个老实孩子。

在开发一个爬虫的过程中,网站接口返回给他的数据看起来是 JSON 格式,于是他就用 Python 自带的 JSON 库去解析。结果解析失败了。因为这些所谓的看起来像 JSON 的东西,竟然没有双引号。

难道是 JSON 的超集? S 君一通搜索,发现用 YMAL 库也许可以解析这种数据。于是安装 YMAL 库,一解析又报错。

难道这些数据直接就是 Python 的字典?于是 S 君用上了邪恶的 eval。又报错,因为里面有 null 和小写的 true。

“你为什么不试一试直接用正则表达式呢?”我对 S 君说。

“靠!” S 君一拍桌子,旁边的老板吓得把搪瓷杯子里面的快乐水洒在了白衬衣上。

然后 S 君用正则表达式花了 10 秒钟结束了战斗。

既然收集了数据就要让它发光发热

S 君在加拿大留学时学的专业是金融数学和统计。所以他对数据分析也很有兴趣。在他爬虫收集的数据够用以后,我跟他讲了如何使用 Pandas 来分析数据。

S 君把他分析的酒店价格变化数据给分享给了我们。不愧是金融+数学+统计学背景的高级知识分子 + 超级强大的 Pandas + 超级好用的 Jupyter。这份数据不仅完美再现了过去一年的价格走势,还预测了未来的任何变化,多达四十六张图表似乎穷尽了所有的组合。

你小学上课传过纸条吗

“我现在能体会那些半路拦截纸条的人是什么心态了。”这是 S 君第一次使用 Charles 时对我说的话。

从此以后,我很少看到 S 君分析网页了。因为他学会了在爬虫开发的过程中,首先通过中间人攻击技术分析微信小程序和手机 App。这种方式往往能够直接获得数据,拿到数据以后就能直接储存,再也不用写烦人的 XPath 或者长的跟表情符号一样的正则表达式了。

有一天,我在玩一个网页版的黑客解密游戏,在网页上寻找某个地方隐藏起来的密码,然后输入每一关的回答框中,答对才能进入下一关。

游戏有 12 关,而我卡在了第 6 关。只见 S 君拿着电脑走到我面前,指着第 12 关的通关页面跟我炫耀。

“你是不是用 MITMProxy 替换了这个网站的 Js 文件?”

“果然还是瞒不过师傅你啊。”

“你拦截了别人的纸条,做了修改,然后又叠好继续传下去,你有考虑过发纸条的人和收纸条的人的感受吗?”

“我小学时候不传纸条,都是妹子直接约我的。”

加密?不存在的

“前端没有秘密”。S 君在成功逆向了一个网站的 Js 文件以后如是对我说。

“那是因为这个网站的 Js 代码就赤裸裸地放在你面前,完全没有混淆。”我对 S 君说道。

“不怕,我可以用 Node.js 来运行混淆过的代码。我已经搭建好 Node.js 服务了,只要把 Js 代码传进去,他就会把结果给我返回回来。” S 君对此似乎一脸自行。

“你什么时候学会的 Node.js ?”

“这不是师傅你说过技多不压身吗?既然做爬虫需要动 JavaScript,那我顺手就把 Node.js 给学了。” S 君毫不畏惧的表情,似乎证明他已经猜透了我要问什么。

“那如果目标没有网站,只有 App 呢?”

“不怕,Android 逆向工程我也顺便研究了一点。Java 我也看得懂。”

“看来这些已经不需要我再教你了。”

你肯定薅了直播答题的羊毛吧

去年年底的直播答题着实火了一把。那个时候,我和 S 君分开已经有一段时间了。我相信,在全民答题的每一个夜晚,S 君的电脑上一定连着不少于六台安卓手机。这些手机运行着不同的答题平台,能够自动读取屏幕上的问题并自动选择答案。

我把安卓自动化测试技术教给 S 君,本来是让他结合爬虫,实现群控从而抓取一些难以处理的数据,但我相信他肯定会用来答题。

变通,这一点他学的越来越好了。

只希望他不要成为羊毛党。


http://www.niftyadmin.cn/n/941344.html

相关文章

一篇文章教你学会电池电量计算

一、锂电池分类锂电池是一类由锂金属或锂合金为负极材料、使用非水电解质溶液的电池。锂电池大致可分为两类:锂金属电池、锂离子电池。 1、锂金属电池属于一次性电池,不能充电。它只能将化学能一次性地转化为电能,不能将电能还原回化学能。如…

低温等离子体过氧化氢灭菌器的一些测试说明

个人总结测试说明: 未完待续......

EMC基础了解

1.电磁兼容性 electromagnetic compatibility(EMC) 设备或系统在其电磁环境中能正常工作且不对该环境中任何事物构成不能承受的电磁骚扰的能力。 电磁兼容一般指电气及电子设备在共同的电磁环境中能执行各自功能的共存状态,个人微信公众号:医械测试,欢迎关注 即要求在同…

介电强度、绝缘电阻和耐压试验

介电强度是一种材料作为绝缘体时的电强度的量度. 它定义为试样被击穿时, 单位厚度承受的最大电压, 表示为伏特每单位厚度. 物质的介电强度越大, 它作为绝缘体的质量越好.给介质施加电压后,当电压超过某一极限值时,通过电介质的电流急剧增加,电介质的介电性能被破坏,这种现象称为…

GB4793.1试验学习(二)

电气间隙 两相邻导体或一个导体与相邻电机壳表面的沿空气测量的最短距离。爬电距离 两相邻导体或一个导体与相邻电机壳表面的沿绝缘表面测量的最短距离。 电气间隙Clearance 在两个导电零部件之间或导电零部件与设备防护界面之间测得的最短空间距离。即在保证电气性能稳定和…

过氧化氢低温等离子体灭菌测试

测试目的 过氧化氢低温等离子体灭菌技术自上世纪九十年代后期传入我国后,已经在国内各大、中型医院广泛应用,对医院感染控制和保障医疗安全方面发挥着重要作用,但是,H2O2是一种有毒有害的化学气体,空气中浓度过高对人体的呼吸道、眼睛、黏膜甚至皮肤都会造成较大的伤害,因…

过氧化氢低温等离子灭菌器测试方案

一、测试目的 1.1通过对过氧化氢低温等离子灭菌器进行功能、性能、质量(结构配合)测试及可靠性测试,并按照《产品技术要求》对安全性、报警机制、功耗、连续工作时间及老化进行验证测试判断该设备是否符合标准,并分析影响各项测试的关键因素,确保产品符合GB/T32309&G…

灭菌仓密封性测试方案

如有转载请联系作者本人微信gr13223062575