爬今日头条,各种失败经验,之后成功了

Python013

爬今日头条,各种失败经验,之后成功了,第1张

最近研究了一下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之后再来。忧伤。。。

1、人才需求缺口大:根据《中国人才生态白皮书》研究分析,到2018年底,我国人工智能人才缺口将突破100万,到2020年,这一数字将攀升到226万。在过去的几年中,Python已经成为现代软件开发,基础设施管理领域的一个热门话题,特别是在数据学科和人工智能领域。Python在人工智能、数据分析等领域,表现突出,像自动抓取和分析数据,自动下载资料,提取关键词这样的功能都是分分钟完成,十分简单。

2、全民学习Python的热潮:编程可以将我们从重复的工作中释放出来,去完成更多更有创造性、挑战性的工作。爬数据、分析数据、做统计、做报告……这些我们每天做的重复性的工作,你都可以叫交给程序搞定。不夸张地讲,编程能力会逐渐成为大众需要掌握的能力标配,而Python也将会被纳入职场基本技能之一。如今Python已进入小学教材,甚至将加入高考。

3、语言简洁易上手:作为语法最简单的编程语言,Python可以用更少的代码来表达想法。比如,同样是实现一键整理文档的功能,Python的代码就明显更加简洁。小学生也可以上手学习的计算机语言。

4、薪资待遇好:如果说程序员薪资算是众多行业里的佼佼者,那么Python的薪资可以算是各大类语言的佼佼者了。比如北京,国内猎聘网发布的统计数据,平均月薪2w,再加上年终奖,13/14薪资,一年妥妥30w!所以Python这门语言,前途不可限量。

Python前景好、岗位多、薪资高,学完之后可以选择以下就业岗位:

1、Web开发(Python后端)

Python有很多优秀的Web开发框架,如Flask、Django等,依靠这些框架可以快速帮助我们搭建一个网站,当需要新功能时,Python只需要添加几行代码即可。

比如知乎、豆瓣、小米这样的大厂,早期网站也都是用Python所搭建的,国外更多,如YouTube、Quora、Reddit等顶级流量的网站,也都是依靠Python所搭建的。

2、Python爬虫工程师

顾名思义,就是做爬虫的工程师,用Python收集和爬取互联网的信息,也是小伙伴们学习Python的第一动力,比如一些靠人力一星期才能完成的工作,使用Python爬虫可能半天不到就完事了,实用性非常高,学会Python爬虫后,就算不做程序员的工作,也能加分不少。

3、Python数据分析师

现如今数据非常宝贝,比如现在火的公司:今日头条、抖音、快手等,产品也都是建立在用户分析上的,更不用说淘宝、京东这些“定制化推荐”了。

可以说所有的商业公司,都需要这样一名工程师,也导致Python数据分析师成了目前最火的职业之一。

Python是目前数据分析业务中,最常用的语言,学会Python后,基本可以满足数据分析经理的招聘需求。

4、AI工程师

人工智能是目前最火的方向之一,薪资待遇也是非常的高,从招聘网站上就可以看出,当然这些职位的要求也比较高,Python是人工智能时代的第一语言,不管是机器学习还是深度学习,最常用的工具和框架都需要用Python调用,如Numpy、Scipy、Pandas等,因此Python是人工智能工程师的必备技能之一。

5、自动化运维工程师

运维工程师经常要监控上百台机器的运行,或同时部署的情况,使用Python可以自动化批量管理服务器,自动化运维也是Python的主要应用方向之一,它在系统管理、文档管理方面都有很强大的功能。

6、自动化测试工程师

测试的工作室枯燥乏味的,在过去,每次产品更新,都要重复测试一遍,效率低而且非常容易出错,Python提供了很多自动化测试的框架,如Selenium、Pytest等,避免了大量的重复工作,Python自动化测试也越来越流行。

7、Python游戏开发

Python游戏开发集中在游戏服务器领域,主要负责网络游戏的服务器功能开发、性能优化等工作。