现在的软件有哪些是用Python语言编程的?

Python018

现在的软件有哪些是用Python语言编程的?,第1张

国内知名的使用Python编程公司是豆瓣和知乎,头条早期也是使用Python编程。而国外的知名公司有Youtube, Quora, Dropbox和Google等。

当我们刷知乎刷豆瓣时,当我们使用这些公司的服务时,背后就有Python代码默默地为我们工作。

简介

去年(2019)我们人类首次见到了黑洞的照片,掌声背后Python也功不可没。天文学家使用Python处理望远镜收集的数据,除了用到Astropy这个天文学相关的库之外,还使用了Numpy, Scipy, Pandas进行数据处理,用Matplotlib画图等等,而且也用到了Jupyter Notbook这款非常赞的工具。

时间进入2000年,Web开始流行,Python也进入Web开发领域。Python知名的Web框架有Django, Tornado, Flask,知乎就使用了Tornado。同时,搜索引擎和爬虫的火热,其间也少不了Python的身影,scrapy, selenium, pyspider等爬虫工具就是Python开发的(selenium比较特殊一点,略)。对爬到的html页面进行处理,在Python中有lxml, beautiful soup, pyquery等库帮我们处理。

最近研究了一下js加密,发现今日头条比较适合练手,在头条获取数据的XHR中request参数有一项_signature参数,这个是就是经过js加密的数据。解决方案在最后。

先说寻找逻辑,叫顺藤摸瓜,藤是params中的key,瓜是js函数,在哪里摸,我用的是chrome F12,全局查找,就是在网址ctrl+f,注意看结果,前面有url这种一般都是在headers之类带着没什么价值,要看出来具体数据的。

然后在preview里,格式化看得清楚,还是查找signature。

这样就成功一大半了。顺便还找到了as和cp

as: e.as,cp: e.cp,

这个e也在前面定义了var e = ascp.getHoney(),然后在搜索getHoney,就找到了。

把这段复制进pycharm的zhu.js文件里,然后新建一个python文件来运行,nodejs直接运行也行。

额,报错了,execjs._exceptions.ProgramError: ReferenceError: md5 is not defined

赶紧查了一下md5是个加密模块, nodejs安装MD5 ,然后改装了改装一下,增加了var md5 = require('md5-node')运行成功。

然后就到了signature, _signature: i,i = TAC.sign("refresh" === t ? 0 : r.params.max_behot_time_tmp))

params.max_behot_time_tmp应该是在回传的数据里的max_behot_time了。

首次请求是0,后来的是根据前一次请求的后传数据继续请求。

不知所云,但还是按照老办法试试看能不能运行。

execjs._exceptions.ProgramError: TypeError: Cannot read property 'userAgent' of undefined。

这回我参考一下 别人怎么办

原来要加useagent,

global.navigator={}

global.navigator.userAgent=

然后变成这样

调用发现又有错误:

好像说的是var data = TAC.sign(0)之前出现了一个不该出现的逗号,把它改成分号,果然成功了,

满怀欣喜的把signature,cp,as找到拼接成url发送,结果并不能返回数据。

有些忧郁的又看看别人怎么办, 用selenium获取参数 ,phantomjs不维护了,听说chrome headless可以替代之, 别人家说这么用 ,chrome还是打开窗口了,后来发现chromedriver.exe版本与chrome有严格的对应关系。 官网这样说

总算是chrome是无头的了,现在只差跟着up主把参数弄出来就行了,因为有了前面的查找,selenium执行的函数名称也很清楚,

signature = brower.execute_script('return TAC.sign(0)')

果然出来一个参数,开心的拼接url发送请求还是没数据回来。。。

忧伤的想了好久,尝试了多次,终于在手机版里发现可以不用cp和as参数,用哪里生成的signature都能拼接出结果,只是max_behot_time是藏在前一页最后一项的信息里

用requests的session或者scrapy都能连续爬取了。不过m站将返回数量20写进了js里,更改params的参数也不能控制一次的爬取量还是很是遗憾。

结果

好像必须带着cookie才能爬取后续的,不然永远都只能爬取第一页的内容,获取cookie用request的session都不行可能只能用selenium获取cookie之后再来。忧伤。。。