Python爬取知乎与我所理解的爬虫与反爬虫

2024-05-17

1. Python爬取知乎与我所理解的爬虫与反爬虫

 关于知乎验证码登陆的问题,用到了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爬取知乎与我所理解的爬虫与反爬虫

2. 如何对知乎内容进行爬虫

下面说明知乎爬虫的源码和涉及主要技术点:
(1)程序package组织
(2)模拟登录(爬虫主要技术点1)
     
 要爬去需要登录的网站数据,模拟登录是必要可少的一步,而且往往是难点。知乎爬虫的模拟登录可以做一个很好的案例。要实现一个网站的模拟登录,需要两大步骤是:(1)对登录的请求过程进行分析,找到登录的关键请求和步骤,分析工具可以有IE自带(快捷键F12)、Fiddler、HttpWatcher;(2)编写代码模拟登录的过程。
模拟登录

(3)网页下载(爬虫主要技术点2)
     
模拟登录后,便可下载目标网页html了。知乎爬虫基于HttpClient写了一个网络连接线程池,并且封装了常用的get和post两种网页下载的方法。
(4)自动获取网页编码(爬虫主要技术点3)
     
 自动获取网页编码是确保下载网页html不出现乱码的前提。知乎爬虫中提供方法可以解决绝大部分乱码下载网页乱码问题。
(5)网页解析和提取(爬虫主要技术点4)
     
 使用Java写爬虫,常见的网页解析和提取方法有两种:利用开源Jar包Jsoup和正则。一般来说,Jsoup就可以解决问题,极少出现Jsoup不能解析和提取的情况。Jsoup强大功能,使得解析和提取异常简单。知乎爬虫采用的就是Jsoup。
(6)正则匹配与提取(爬虫主要技术点5)
     
 虽然知乎爬虫采用Jsoup来进行网页解析,但是仍然封装了正则匹配与提取数据的方法,因为正则还可以做其他的事情,如在知乎爬虫中使用正则来进行url地址的过滤和判断。
(7)数据去重(爬虫主要技术点6)
     
 对于爬虫,根据场景不同,可以有不同的去重方案。(1)少量数据,比如几万或者十几万条的情况,使用Map或Set便可;(2)中量数据,比如几百万或者上千万,使用BloomFilter(著名的布隆过滤器)可以解决;(3)大量数据,上亿或者几十亿,Redis可以解决。知乎爬虫给出了BloomFilter的实现,但是采用的Redis进行去重。
(8)设计模式等Java高级编程实践
     
 除了以上爬虫主要的技术点之外,知乎爬虫的实现还涉及多种设计模式,主要有链模式、单例模式、组合模式等,同时还使用了Java反射。除了学习爬虫技术,这对学习设计模式和Java反射机制也是一个不错的案例。
4. 一些抓取结果

3. python爬虫怎么赚钱 知乎

第一种。找爬虫外包工作
网络爬虫最通常的挣钱方式通过外包网站,做中小规模的爬虫项目,向甲方提供数据抓取,数据结构化,数据清洗等服务。新入行的程序员大多数都会先尝试这个方向,直接靠技术手段挣钱,也是技术人员最擅长的方式,但是由于竞争人员太多,价格可能不是很贵,白菜价。
第二种。抓取数据做网站
可以通过Python爬虫抓取数据,来做网站挣钱,每个月有小几千块钱,虽然挣得不多,但是做成之后不需要怎么维护,也算是有被动收入了。
第三种。在职大学生
如果你是在职大学生,数学或者计算机相关专业的人员,编程能力还可以的话,可以稍微看一下编程知识,比如爬虫库、HTML解析、内容存储等,复杂还需要了解URL排重、模拟登录、验证码识别、多线程等,这部分人员工程经验比较少,想要通过爬虫赚钱的话,可以找一些少量数据抓取的项目,一点点积累经验,后期可以尝试接一些监控类的项目或者大规模抓取的项目。
第四种。在职人员
如果你本身就从事Python网络爬虫工作,挣钱是非常简单的。在职人员比较熟悉项目开发流程,工程经验丰富,能对一个任务的难度、时间、花费进行合理评估,可以尝试去找一些大规模抓取任务、监控任务、移动端模拟登录并抓取任务等,收益是非常可观的。
第五种。运营自媒体
如果你技术好,经验丰富,可以自己尝试运营公众号、自媒体、博客等,现在学习Python写爬虫的人越来越多,很多都是非科班出身,需求量大增,你可以利用自己的技术多写一些教程和学习经验总结,运营效果不错的话,也可以获得可观的收入。

python爬虫怎么赚钱 知乎