新公司总结与心得
心之所向,无敌于天下
面试的过程肯定是枯燥无味,还记得刚刚面试的那一段时间,刚刚好是在疫情期间,因此,我上一家公司也实行了在家办公,我每天基本上就是起床办公,结束背面试题。
就这样,日复一日,之后尝试着去投递了几家公司,也接到了几家公司的面试邀请,于是,开始了面试 + 工作 + 学习的生活。
当第一家面试结束的时候,我总结了很多,因为对方的需求和我期望的职位不同导致我并没有继续得到二面的机会,我思考了我的优势在哪里,并且思考了并不能为了面试而面试。
于是我进入了一个新的阶段:我在等。我将所有的找工作软件的状态和简历都进行了更新,并显示:积极找工作状态,并且pool上了我的博客地址和优势点。
事实证明,我是对的,我成功的等到了我现在就职的这家公司。
面试过程十分的愉快,一面是以为虽然从未谋面但是却聊的特别愉快的人,因为我的优势在逆向,因此我们聊的基本都在逆向方向,并且提出了我见解和想法,他表示赞同,并且邀请我进入下一场电话面试。
第二场面试主要就是对基础技术的面试,个别问题还是没有准确回答,不过貌似达到了他们要求的平均线,哈哈哈,可以说感觉非常的巧妙。
第三场的时候就已经是我司的CTO了,我们聊了很多有关于未来个人职业生涯规划和公司理解等等等。
小插曲就是,我要的薪资可能略微高于我司的预算,于是我一开始便拒绝了,后来我司hr又找到我,希望能够愉快的合作并给出了令人欣慰的薪资,我便顺利入职。
我觉得最关键的莫过于主动权,当整场面试的主动权在你的手里,那么这场面试可能会变得非常的可爱。
其次我觉得,在准备面试之前一定要知道你和同为面试者的人,技术优势在哪里,没有特殊的优势就尽量找自己的闪光点,不能是那种认真努力上进的那种闪光点哦!
最后就是基础啦,我个人觉得面试很大程度在于看你基础牢不牢靠,因为你现在的工作方向很多程度上并不会和你下一份工作有太多的重合点,面试官们希望的自然是比较能够极快适应公司节奏的人才,那么基础就是重中之重了。
新公司真的是很快乐,虽然每天加班10 9 6,但是每一天过的都很快!基本上组内所有的人都会无偿的奉献自己的知识,达到共同进步!我真的是太喜欢这种氛围了!!!
新接受项目—微信公众号服务
激流勇进,方能才华横溢
初识
幸运的是,我遇到一个非常nice的小组领导,和非常nice的一帮同事!
在接手新的项目的时候,我真的是问了无数个问题。。。如果换做我,我大概早就开始发飙了哈哈哈哈哈。
新接手的项目是爬取微信公众号的文章,这个项目不可谓之不繁琐!!!
接手时候整个项目应用了:mitmproxy + js跳转 + 70台真机模拟
前人(后来我才知道这个人是我的一面,好难受😣)的方案非常多的手动操作,每天都需要手动点击链接开始跳转,并且中间会出现各种错误,也需要手动干预。
于是我开始了我的仁者时间,我决定自己写一套能够全程去手工的服务!
服务策划及调研
根据目前已有的服务总结微信反爬策略,并得出以下总结
- 每个微信号每天可以查看公众号历史的次数有上限,并且每个不同,大概在300-400左右。
- 微信公众号对ip并没有封禁。
- 微信公众号的文章详情页可以无限制跳转。
- 微信公众号存在两个参数相对来说比较重要:
- x-wechat-key, x-wechat-uin, 一般来说uin同一台设备不会变。
- key 每次打开一个详情页都会主动发送两个携带新key的请求。
- key 的有效时长在30min左右
- key 能够多次使用,并且仅仅对应同一个公众号的文章,当使用频率过高或者次数过多,key将失效。
- 微信公众号,存在作用的几个参数:
- pass_ticket:
- 这个是可以存在于url/param/post data/cookies中的一个参数。
- 该参数作用:能够识别登陆用户,个别请求是需要识别登陆用户才能够返回完整数据。
- appmsg_token:
- 该参数是存在于home请求中响应的参数。
- 该参数作用是保证ext/comment数据返回正确。应该是微信的通用token。
- 该参数时效性大概在2h左右
- cookie:
- 我全程用的session,因此并未着重关注。
- pass_ticket:
- 微信公众号采用了能够和js交互的架构模式,笼统的说就是js可以调用java,java可以调用js
- 微信公众号请求对应数据内容:
- home:
- like: https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz=MjM5MDQxMzU3NQ==&scene=126&bizpsid=0&devicetype=android-23&version=27000340&lang=zh_CN&nettype=WIFI&a8scene=3&wx_header=1
- 该页面是访问一个公众号的list的入口,通过这个页面获取到appmsg_token并存入缓存供后续使用。
- 该页面有点特殊是页面数据在body中,页面是html,body中存在json的数据,需要进行转译后方可和整场翻页数据保持一致。
- 猜测:微信每个账号访问该页面是有限制的。
- next:
- like: https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz={biz}&f=json&offset={offset}&count=10&is_ok=1&scene=126&uin=777&key=777&wxtoken=&appmsg_token={appmsg_token}&x5=0&f=json
- 该请求是list在翻页时候发送的请求,返回值为json。
- 该响应目前不清楚是否算在统计微信账号访问上限中。
- ext:
- like: “https://mp.weixin.qq.com/mp/getappmsgext?f=json&mock=&fasttmplajax=1&f=json&uin=&key=&pass_ticket={pass_ticket}&wxtoken=&devicetype=android-28&clientversion=27000334&__biz={biz}&appmsg_token{appmsg_token}=&x5=0&f=json&wx_header=1&pass_ticket={pass_ticket2}".format(biz=parse.quote(biz), pass_ticket=pass_ticket, pass_ticket2=pass_ticket, appmsg_token=param[“appmsg_token”])
- 该页面中存在相关页面信息包括比较重要: 点赞数,阅读数(上限10w)等等。
- 该页面需要携带足够参数,否则页面返回数据为5个空的[]
- comment:
- like: “https://mp.weixin.qq.com/mp/appmsg_comment?action=getcomment&scene=0&appmsgid={mid}&idx={idx}&comment_id={comment_id}&offset=0&limit=100&send_time=&&fasttmplajax=1&f=json&uin=&key=&pass_ticket={pass_ticket}&wxtoken=777&devicetype=android-28&clientversion=27000334&__biz={biz}&appmsg_token={appmsg_token}&x5=0&f=json&wx_header=1".format(biz=parse.quote(biz), mid=mid, comment_id=param[“comment_id”], idx=idx, pass_ticket=pass_ticket, appmsg_token=param[“appmsg_token”])
- 该页面中存在评论相关数据,包括:评论人头像,内容,时间,id,点赞数等等。
- 如果ext访问失败,comment也会访问失败。
- home:
- 微信公众号爬取过程中封禁策略:
- 从自己目前的程序总结出来的几种封禁策略:
- 微信公众号同一个公众号使用同一个key访问频率过高或者数量过多,会出现:crawl detail page busy.., 特征为:操作频繁,请稍后再试。
- 该封禁持续时间在50s 左右。
- 一般解决策略是将被封禁的biz重新入队列,进行增量爬取。
- 从自己目前的程序总结出来的几种封禁策略:
- 微信公众号文章会出现的几种情况,可以根据不同情况作出不同的操作,以下都是原文中存在该字段会触发的情况:
- 该公众号已迁移至新的帐号,原帐号已回收。若需访问原文章链接,请点击下方按钮。
- 此帐号已被屏蔽, 内容无法查看
- 该内容已被发布者删除
- 原帐号迁移时未将文章素材同步至新帐号,该链接已不可访问。
- 此帐号已自主注销,内容无法查看
- 此帐号被投诉且经审核涉嫌侵权。此帐号已注销,内容无法查看。
- 此帐号已申请公众号帐号迁移流程,被冻结/回收
- 此帐号已注销,内容无法查看
- 此内容因违规无法查看
微信公众号服务要求明细:
既然想要更新以下新公司的微信公众号服务,那么我们首先是一定要定下一个目标的:
- 服务能够稳定,长期运行。
- 服务配合多台实体手机运行。
- 服务抓取过程尽量做到无人为干预。
- 服务抓取到的数据完整且数据真实可信。
- 服务能够支持周更,月更。
- 服务出问题可以及时报警并每日出日报统计。
微信公众号服务设计思路:
在前言中有说明,原微信公众号服务的大体架构:mitmproxy + js跳转 + 70台真机模拟
可想而知,初始化js跳转和手机网络问题,包括新增公众号等等的流程都非常繁琐,因此我们的新服务尽量避免这些问题。
现今微信服务采用的整体技术架构是:xposed模块 + web服务 + mitmproxy js 跳转 + 70台真机
基本可以实现去手动的自动化操作。
每天爬取kol数量可以在:2.3w左右(70台真机)
每天爬取时间大概在:3h左右