40岁老男人从0开始学python实录(第4天):廖雪峰,拜拜了您嘞

Python09

40岁老男人从0开始学python实录(第4天):廖雪峰,拜拜了您嘞,第1张

各位渴望看我笑话的老铁们,恭喜,你们又有乐子看了。

在昨天顺利攻克了文本编辑器难题后,我很愉快继续学习后面的两个小节《Python代码运行助手》《输入和输出》。

前者没啥可说的,感觉跟我没啥太大关系、意义不大,简单看看就过去了。

《输入和输出》一节,按照教程操作,还是蛮愉快的。

这节主要讲了print和input命令的使用方法,以及变量的概念。

前面的学习过程可谓一马平川,结果最后的练习稍微出现了点小问题。

练习:请利用print()输出1024 * 768 = xxx。

我本来觉得是个很简单的问题,没想到输入了4遍才搞定。

我估计应该是中间错加了空格的问题。

好吧,对比例子,应该还得加逗号。

嗯,这他么其实是个手误,逗号输错了位置。(残念)

这小玩意都用了四遍才搞定,40岁的老男人真的太难了。

继续进入后面的学习。

下一章《Python基础》中第一节《数据类型和变量》。

然后,我就蒙圈了。

这一节的内容知识量明显增多,前面的内容还好,按部就班的按照教程进行操作就好。

后面开始出现转义符的概念,什么\n、\t、\之类的东东,总之确实需要动些脑子了。

这里我觉得,是不是可以简单理解为:两个“\”表示显示“\”,一个“\”表示转义呢?

相比之下,后面讲“用r''表示''内部的字符串默认不转义”我感觉更好理解一些。

还有,“\t 表示制表符”是什么意思?

我真的好傻,悲伤的泪水不争气的流了下来。

上面的问题,哪位知道的仁兄,望在评论区赐教,在此谢过了。

再往后讲变量,我就有点进行不下去了。

给a赋值为1,这个我明白,但是后面t_007=T007,这是为啥?咋蹦出来的?

或者t_007跟a是一个概念,也是在进行赋值操作?

我这么猜测不知道对不对。

他后面举的那个例子,我就彻底晕菜了。

其实说起来,可能也不能怪人家教程,周末这两天在家,确实也很难静下来学习。

但是另一方面,就像很多网友评论区、微信上跟我探讨的,廖雪峰这个教程确实还是存在一些问题的,甚至有人说他有些误导的成分在里面,这个我学的还少,就不敢妄言了。

所以,我决定,结合自己的实际情况(岁数大、脑子慢!),以后以b站600集视频为主不香吗?

毕竟,那个看的很欢乐,最关键的是,学习至今还没遇到槛。

所以,下一期的心得,我就说说在b站上,我都学了些啥吧。。。

关于知乎验证码登陆的问题,用到了Python上一个重要的图片处理库PIL,如果不行,就把图片存到本地,手动输入。

通过对知乎登陆是的抓包,可以发现登陆知乎,需要post三个参数,一个是账号,一个是密码,一个是xrsf。

这个xrsf隐藏在表单里面,每次登陆的时候,应该是服务器随机产生一个字符串。所有,要模拟登陆的时候,必须要拿到xrsf。

用chrome (或者火狐 httpfox 抓包分析)的结果:

所以,必须要拿到xsrf的数值,注意这是一个动态变化的参数,每次都不一样。

拿到xsrf,下面就可以模拟登陆了。

使用requests库的session对象,建立一个会话的好处是,可以把同一个用户的不同请求联系起来,直到会话结束都会自动处理cookies。

注意:cookies 是当前目录的一个文件,这个文件保存了知乎的cookie,如果是第一个登陆,那么当然是没有这个文件的,不能通过cookie文件来登陆。必须要输入密码。

这是登陆的函数,通过login函数来登陆,post 自己的账号,密码和xrsf 到知乎登陆认证的页面上去,然后得到cookie,将cookie保存到当前目录下的文件里面。下次登陆的时候,直接读取这个cookie文件。

这是cookie文件的内容

以下是源码:

运行结果:

https://github.com/zhaozhengcoder/Spider/tree/master/spider_zhihu

爬虫最基本的策略

爬虫策略:

这两个都是在http协议的报文段的检查,同样爬虫端可以很方便的设置这些字段的值,来欺骗服务器。

反爬虫进阶策略:

1.像知乎一样,在登录的表单里面放入一个隐藏字段,里面会有一个随机数,每次都不一样,这样除非你的爬虫脚本能够解析这个随机数,否则下次爬的时候就不行了。

2.记录访问的ip,统计访问次数,如果次数太高,可以认为这个ip有问题。

爬虫进阶策略:

1.像这篇文章提到的,爬虫也可以先解析一下隐藏字段的值,然后再进行模拟登录。

2.爬虫可以使用ip代理池的方式,来避免被发现。同时,也可以爬一会休息一会的方式来降低频率。另外,服务器根据ip访问次数来进行反爬,再ipv6没有全面普及的时代,这个策略会很容易造成误伤。(这个是我个人的理解)。

通过Cookie限制进行反爬虫:

和Headers校验的反爬虫机制类似,当用户向目标网站发送请求时,会再请求数据中携带Cookie,网站通过校验请求信息是否存在Cookie,以及校验Cookie的值来判定发起访问请求的到底是真实的用户还是爬虫,第一次打开网页会生成一个随机cookie,如果再次打开网页这个Cookie不存在,那么再次设置,第三次打开仍然不存在,这就非常有可能是爬虫在工作了。

反爬虫进进阶策略:

1.数据投毒,服务器在自己的页面上放置很多隐藏的url,这些url存在于html文件文件里面,但是通过css或者js使他们不会被显示在用户看到的页面上面。(确保用户点击不到)。那么,爬虫在爬取网页的时候,很用可能取访问这个url,服务器可以100%的认为这是爬虫干的,然后可以返回给他一些错误的数据,或者是拒绝响应。

爬虫进进阶策略:

1.各个网站虽然需要反爬虫,但是不能够把百度,谷歌这样的搜索引擎的爬虫给干了(干了的话,你的网站在百度都说搜不到!)。这样爬虫应该就可以冒充是百度的爬虫去爬。(但是ip也许可能被识破,因为你的ip并不是百度的ip)

反爬虫进进进阶策略:

给个验证码,让你输入以后才能登录,登录之后,才能访问。

爬虫进进进阶策略:

图像识别,机器学习,识别验证码。不过这个应该比较难,或者说成本比较高。

参考资料:

廖雪峰的python教程

静觅的python教程

requests库官方文档

segmentfault上面有一个人的关于知乎爬虫的博客,找不到链接了

我觉得这两个东西都很棒,但是它们有着不同的目的。廖雪峰的Python教程是专为初学者而准备的,而小甲鱼的视频教程更多的是以技术性的方式来解释。所以,如果你想学习Python,可以根据你的学习需求选择一种教程,而不是一定要选择其中一种。