本文转载自微信公众号《Python技术》,作者:佩森酱。转载本文请联系Python技术公众号。自从我们的Python技术迁移过来之后,大家的消息交互就很热闹了。感谢您一如既往的支持。我会继续努力,为大家提供更多有用的文章。今天分享一个迁移过程的幕后故事。它内容丰富且有趣。来听听吧。不流畅迁移公众号是腾讯提供的一项服务,将原公众号的主体切换到另一个公众号,然后收回原公众号。大部分都是腾讯完成的,但是还有一些工作需要我们自己处理,比如迁移公众号的关键词消息回复。事情虽然不大,但却很重要。如果做得不好,读者将找不到源代码,影响大家的学习效率。不过单机操作还是比较费力,因为需要同时登录两个公众号,打开两个页面,来回切换,很不方便,也容易出错。怎么办,求神拜佛肯定是没用的,但是有一位真正不得不拜的大神——蟒蛇!由于在网页上可以看到提取的数据,因此必须使用爬虫来获取。还是故技重施,在浏览器中按F12,进入魔法世界。你知道百度的校招公告就藏在这里吗?先不说我告诉你的第一步,先清空请求记录,刷新页面,从第一条请求记录开始分析。其实就是看请求的返回值是否包含页面上列表中的数据。好在第一个是,但是没有直接给数据,而是返回了一个很大的js脚本,是在页面加载后计算的。要分析请求,您需要检查PerserveLog。否则,切换有用页面时不难看到请求记录。复制js,提取关键词回复信息整理即可。问题是每页只显示十个项目,有20多页。复杂度的代价有点高。我得想办法了。我观察了网址。有两个参数,一个是count,一个是offset。我对它很熟悉。和分页参数不一样吗?尝试改变分析请求,把count改成1000,offset改成0,意思是从第一行开始,得到一千,回车……大功告成!仔细查看,确实返回了所有记录,因为总共没有一千行。现在你可以粗暴地做,因为它只会做一次。复制出来,用文本编辑器(最好支持列编辑)简单处理得到一个jsonjson,所以方法需要灵活运用。如果能直接通过程序获取最好。如果没有,人工协助也是可能的。分析与写入接下来就是如何写入这些数据了。进入新公众号的管理后台,创建关键词回复,解析请求,别忘了打开开发者工具(浏览器按F12)。一般提交请求是第一个,确实是,但是肉眼看不清楚具体数据,怎么办?您还记得之前多次提到的将请求复制为curlbash吗?是的,在请求上使用它右键单击??,选择CopyascURL(bash)CopycURL放在哪里?当然不是在文本文件中,除非你想做一个临时存储。我们直接粘贴到https://curl.trillworks.com/就可以直接得到转换后的Python代码。然后将Python代码复制到文件中,执行一下,看看效果。果不其然,又增加了一条新记录。数据处理接下来对请求数据进行分析,与刚才json文件中的进行对比。一般的名字都很相似,所以很容易找出来。字段相同,可能来自同一个架构设计,不太可能是不同团队开发的。哈哈,我读的好深啊!一边搜索一边写,搜索完代码就会补全,像这样:data={'replytype':'smartreply','ruleid':'0','rulename':kw['rule_name'],#rulename'allreply':kw['reply_all'],#fullreply'replycnt':kw['reply_cnt'],#replynumber'keywordcnt':len(kw['keyword_list']),#keywordnumber'keyword0':kw['keyword_list'][0]['content'],#keyword'matchmode0':kw['keyword_list'][0]['match_mode'],#匹配模式'type0':kw['reply_list'][0]['reply_type'],#消息类型'fileid0':'undefined','content0':kw['reply_list'][0]['content'],#replycontent'token':'105xxxx502','lang':'zh_CN','f':'json','ajax':'1'}kw是从json读取的每一行的replydatatoken,也就是登录凭证。如果不通过或者错误,就会创建失败,说明腾讯做了很多保护整合。现在结合各部分的代码。首先是解析json代码:withopen("keyword.js",'r',encoding='utf-8')asword:d=json.load(word)超级简单,使用json库转换keyword.js文件中的内容转换成Python的List对象再进行组装,代码如上所示。最后发送请求:add(data)print('处理完成,休息2秒...')time.sleep(2)add方法封装了Python请求代码方便调用,动态部分使用,把time.sleep(2)换成参数data是一种友善,休息2秒,以免唤醒反爬怪(友情提示:唤醒反爬机制一点都不好玩)好了,这样就搞定了,代码写的用了很多小时,不到两分钟就跑完了。最后美中不足的是,代码只处理了一条消息的大部分回复(代码中直接获取的数组第一个元素,如kw['reply_list'][0]),以及几条回复是多条消息,无法处理。如果要照顾的话,如果可以的话,80%以上的时候都可以,不到20%的情况去兼容是不划算的。该怎么办?沙拉!-直接手动添加。哈哈,我很想做这个小手工。综上所述,其他地方完全可以用这样的方法,比如之前的佑玛程序,训练营运营数据提取等,都是同一个套路:分析浏览器请求,推荐使用Chrome浏览器将请求复制为cURLbash命令并将其粘贴到CURL到Python提取Python代码修改Python代码以动态处理数据就这么简单,明白了吗?然后,找个地方试一下。每天进步一点点,人生不如心!