scrapy框架开发爬虫实战——反爬虫策略与反反爬虫策略
反爬虫、反反爬虫
简单低级的爬虫有一个很大的优点:速度快,伪装度低。如果你爬取的网站没有反爬机制,爬虫们可以非常简单粗暴地快速抓取大量数据,但是这样往往就导致一个问题,因为请求过多,很容易造成服务器过载,不能正常工作。
网站怎样识别爬虫?
1、检查header信息,一般有User-Agent,Referer、Cookies等等。
- User-Agent是检查用户所用客户端的种类和版本,在Scrapy中,通常是在下载器中间件中进行处理。
- Referer是检查此请求由哪里来,通常可以做图片的盗链判断。在Scrapy中,如果某个页面url是通过之前爬取的页面提取到,Scrapy会自动把之前爬取的页面url作为Referfer。也可以通过上面的方式自己定义Referfer字段。
- 网站可能会检测Cookie中session_id的使用次数,如果超过限制,就触发反爬策略。
2、 网站常常会针对IP访问频率统计,设置一个阈值,当超过这个阈值时,网站就会判断这个IP访问太过频繁,会短时间甚至永久性地禁止该IP地址的访问 。
3、网站往往会给一个浏览器隐藏的连接,正常的浏览网页的人看不见,也更加不会去点击。加入来访者点击了改连接,就会被网站认定是爬虫。
网站采取的反爬虫的策略?
1、设置IP限制访问:在一段时间内该IP是无法访问的
2、返回验证码:要求用户输入验证码,防止用户是机器
3、采用ajax异步加载:如果只是爬取静态网页的爬虫是什么都得不到的
4、爬虫陷阱:让你爬取的内容变成其他和本网站无关的信息
5、加速乐的服务:在访问之前先判断客户端的cookie正不正确。如果不正确,返回521状态码,set-cookie并且返回一段js代码通过浏览 器执行后又可以生成一个cookie,只有这两个cookie一起发送给服务器,才会返回正确的网页内容。
6、javascript渲染:网页开发者将重要信息放在网页中但不写入html标签中,而浏览器会自动渲染<script>标签的js代码将信息展现在浏览器当中,而爬虫是不具备执行js代码的能力,所以无法将js事件产生的信息读取出来
反反爬虫的策略
1、设置等待时间
直接:导入time,然后限制时间为正常人浏览时间
间接:看具体情况来等待,比如某些元素需要一定时间加载。wait1.until(lambda driver:driver.find_element_by_xpath("//div[@id='link-report']/span"))
2、识别验证码
人工识别:适合比较复杂的验证码,正确率高,但是成本也高
机器识别:调用在线验证码识别软件接口识别验证码,正确率百分之八九十以上
3、异步加载
① fiddler / wireshark抓包分析ajax请求的界面,再通过规律仿造服务器构造一个请求访问服务器得到返回的真实数据包。
② 通过PhantomJS+Selenium模拟浏览器行为,抓取经过js渲染后的页面。
- phantomjs是一个无头无界面浏览器,使用selenium可以驱动它模拟浏览器的一切操作,但缺点也很明显,爬取效率低;需要注意的是,调用PhantomJs需要指定PhantomJs的可执行文件路径,通常是将该路径添加到系统的path路径,让程序执行时自动去path中寻找。
- Selenium请求不再由Scrapy的Downloader执行,所以之前添加的请求头等信息都会失效,需要在Selenium中重新添加。
4、爬虫陷阱
一般是比较简单的死循环,可以对爬虫将要爬取的链接进行判断,不重复爬取相同的页面。除此之外,对于特定的元素看清之后小心爬取,还可使用scrapy的LinkExtractor设定unique参数为True即可或者直接设定爬虫的最大循环次数。
5、针对用户行为
- cookie禁用:对于一些不需要登录的网站,可以在setting.py文件中设置COOKIES_ENABLED = False
- 自动限速:在setting.py文件中设置DOWNLOAD_DELAY = 1
- 判断header:在请求时构造一个header,每次url请求更换一次user-agent。
- 采用代理IP:可以做一个IP代理池,每次运行时随机挑选一个做访问IP。
6、scrapy和redis分布式爬虫
可以利用多台机器的宽带加速爬取,还有利用多台机器的ip加速爬取。
一般步骤如下:
- 基本的http抓取工具,如scrapy
- 避免重复抓取网页,如Bloom Filter
- 维护一个所有集群机器能够有效分享的分布式队列
- 将分布式队列和Scrapy结合
- 后续处理,网页析取(python-goose),存储(Mongodb)
7、加速乐
将浏览器返回的js代码放在一个字符串中,然后利用nodejs对这段代码进行反压缩,然后对局部的信息进行解密,得到关键信息放入下一次访问请求的头部中。
更多反爬虫策略参考:http://jinbitou.net/2016/12/01/2229.html
参考原文链接:使用scrapy做爬虫遇到的一些坑:网站常用的反爬虫策略,如何机智的躲过反爬虫Crawled (403)_腾阳的博客-CSDN博客
scrapy框架开发爬虫实战——反爬虫策略与反反爬虫策略相关推荐
- python商业爬虫教程_廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程...
廖雪峰老师的Python商业爬虫课程 Python网络爬虫实战教程 体会不一样的Python爬虫课程 1.JPG (53.51 KB, 下载次数: 1) 2019-8-9 08:15 上传 2.JPG ...
- scrapy框架开发爬虫实战——采集BOSS直聘信息【爬虫进阶】
项目GitHub https://github.com/liuhf-jlu/scrapy-BOSS- 爬取任务 时间:2019年8月28日 爬取内容:BOSS直聘上的北京市python岗位的招聘信息 ...
- scrapy获取a标签的连接_Python爬虫 scrapy框架初探及实战!
Scrapy框架安装 操作环境介绍 操作系统:Ubuntu19.10 Python版本:Python3.7.4 编译器:pycharm社区版 安装scrapy框架(linux系统下) 安装scrapy ...
- Python爬虫——Scrapy框架(附有实战)
大家好!我是霖hero 有一天,我在逛街,突然被一声靓仔打断了我的脚步,回头一看,原来是水果摊阿姨叫我买水果,说我那么靓仔,便宜一点买给我,自恋的我无法拒绝阿姨的一声声靓仔,于是买了很多水果回家,家人 ...
- 爬虫实战系列(十一):Win10下手机爬虫工具appium的安装与测试
一.前言 之前介绍的都是关于网页爬虫的相关内容,今天博主想跟大家分享一个非常牛的手机爬虫工具Appium,首先我会介绍它的安装方法,然后给出一个Appium连接手机app例程. 二.详细安装过程 2. ...
- Python爬虫实战项目:简单的百度新闻爬虫
这个实战例子是构建一个大规模的异步新闻爬虫,但要分几步走,从简单到复杂,循序渐进的来构建这个Python爬虫 本教程所有代码以Python 3.6实现,不兼顾Python 2,强烈建议大家使用Pyth ...
- scrapy框架开发爬虫实战——css语法
css选择器 CSS即层叠样式表, 其选择器是一种用来确定HTML文档中某部分位置的语言. CSS选择器的语法比XPath更简单一些, 但功能不如XPath强大. 实际上, 当我们调用Selector ...
- Python爬虫实战:手把手教你 字体反爬 CSS反爬练习 猿人学比赛题目四题详解
题目地址:http://match.yuanrenxue.com/match/4 第四题接口没有设置任何反爬,直接获取数据即可 可以看到返回的是一个json,其中的info字段是一段html文本,格式 ...
- 虎扑《不冷笑话》爬虫实战,顺带说说最近学写爬虫的经历(一)
前言 楼主16年毕业,工作内容目前主要以ETL开发为主.有一段时间逛知乎,经常看到有人分享一些数据分析的文章,比如美团上的点餐分析.豆瓣的评分分析,还有网易云音乐热评分析之类的.感觉这些文章都是有实打 ...
最新文章
- 可高效训练超大规模图模型,PyTorch BigGraph是如何做到的?
- w3cschool教程 - jQuery插件总结
- 解决AD 不能打开DDB文件的解决方案
- Java 并发编程之 Callable 和 Future
- 微课|玩转Python轻松过二级(3.2节):元组与生成器推导式
- 图像算法三:【图像增强--空间域】图像平滑、中值滤波、图像锐化
- Ubuntu18.04安装微信(方式二)
- 记一次噩梦般的经历——论学会反编译的重要性
- 关键成功因素法(CrISical Success Factors,CSF)
- CANopen 7.过程数据对象 PDO Process data object)
- android qq群加群代码,逆向分析某QQ恶意自动邀请加群APK
- redis命令之哈希表类型hgetall命令用法详情
- 爬取链家北京租房数据并做简单分析
- JS可选链操作符 (?.)
- 密集匹配实验数据共享
- jmail组件 java_Jmail发送邮件工具类分享
- W7正在锁定计算机,win7输错密码锁定了怎么办 win7电脑被锁定的解锁方法
- 信息系统项目管理师---第四章 项目整体管理
- Coupling and Cohesion
- (STITP)jotm-btp的深入分析