本文是对未闻Code·知识星球上的开发经验以及问题解答的总结。
一、开发经验
语言决定思维方式
我刚刚开始工作的时候,其实特别讨厌Java。因为它太繁琐,就像一个絮絮叨叨的老奶奶。但后来因为工作原因强行写了一年的Java,反而不那么讨厌它了。
我们常说语言决定思维方式,Java和Python其实是两种不同的思维方式。用Python写代码的时候,我思考的方式是从下到上,从低到高,实现一个个小组件,再组合成整体功能。但是Java先定义接口再实现接口,这种思维方式让我写代码的时候先整体再局部,从高到低,从上到下,把一个功能拆解成一个个小部分。
另外,一开始我写Python,喜欢用字典来存放各种数据。但是我从Java里面学到了bean的思想,用类来储存数据,这个方法让我的Python代码可读性,可维护性大大提高了。
当我们用Python开发,有时候你要反复跟组员说不能乱用lambda函数,不能一个变量赋值不同类型的数据,不要什么数据都往字典堆一层套一层,过两天他们可能还是要违反,但Java从语法层面就能防止这种事情发生。
二、问题解答
1南哥,可以详细说一下,类存储数据吗?
可爱的豆子——使用Beans思想让Python代码更易维护 这是我2016年的一篇文章,记住Python变量类型的三种方式,2016年的时候,python还么有dataclass这个内置模块。现在用dataclass会更方便。
2南哥 ,出一篇https证书科普文章吧。比如:证书是干啥的,存在哪里了,怎么验证的…再比如:怎么fildder也有自己的证书呢?这些玩意百度着虽能搞 原理并不很清楚
一日一技:HTTPS 证书和中间人攻击的原理
3提问:目前还有办法爬知乎仅会员可完整阅读帖子内容吗?目前知乎会员可完整阅读的帖子只能在 app 中可读web 小程序都不行,airtest 现在不显示回答的内容,fd 抓包在 app 内无网络 (手机自带的浏览器可以访问网络排除了fd设置问题)
爬虫只能爬到人眼能看到的内容。如果服务器不返回全文,爬虫自然爬不到。
41s1000并发的问题,之前用多线程等都达不到要求,找到了问题所在,之前一直用的是collection 中的deque作为队列,今天换成了queue 并发一下子到了1000+..但queue底层是用了deque 为啥还会差别那么大?
谁告诉你queue的底层是deque?
deque底层是双向链表。queue不是。
5提问:南哥,有办法抓去到微信小程序接口getuserinfo返回的数据吗?
有。你可以用mitmproxy监控手机的http请求。拦截这个接口的返回信息。我的爬虫书上面讲到了具体的方法,可以在微信读书上面搜索我的名字就能找到我的书,绿皮那本。
6接问题5,可是这样不绕过安卓微信的sslpining,能抓到数据吗?有没有办法电脑微信抓取呢?这样方便一点
用ios
7提问:南哥,requests的 r.raw和r.content有什么大区别,获取的数据都属于bytes类型呀?
官网原文:In the rare case that you’d like to get the raw socket response from the server, you can access r.raw. If you want to do this, make sure you set stream=True in your initial request.
.raw是socket返回的内容。完全没有经过修改。而.content是经过修改和转码的。如果网站返回的是gzip或者deflate的内容,.content会自动解开
8请教一个问题:想监控一个git工程,当git工程新建分支,或者指定分支有提交时,自动触发一个持续集成任务,这个需求,我应该用什么方法实现呢?
如果你用的是GitHub,可以通过GitHub action。如果你用的gitlab,它有一个东西叫做webhook,让你填写一个网址,每次提交会调用一次这个网址
9提问:号内文章多线程事件监控一日一技:Python多线程的事件监控文章示例代码中eve是类外定义的全局变量,self.event可以算类内部实例方法的局部变量。两个变量为何是同一个对象呢?
我用参数传进去了,代码第17行