前言

反爬虫是网站为了维护自己的核心安全而采取的抑制爬虫的手段,反爬虫的手段有很多种,一般情况下除了百度等网站,反扒机制会常常更新以外。为了保持网站运行的高效,网站采取的反扒机制并不是太多,今天分享几个我在爬虫过程中遇到的反扒机制,并简单介绍其解决方式。

基于User-Agent反爬

简介:服务器后台对访问的User_Agent进行统计,单位时间内同一User_Agent访问的次数超过特定的阀值,则会被不同程度的封禁IP,从而造成无法进行爬虫的状况。

解决方法:

一 . 将常见的User-Agent放到ua_list中,以列表形式进行随机使用

代码示例:

二. 加载fake_useragent库,随机生成User-Agent添加到headers中

代码示例:

2 基于IP反爬

简介: 爬虫程序可能会在短时间内对指定的服务器发起高频的请求。后台服务器对访问进行统计,单位时间内同一IP访问的次数超过一个特定的值(阀值),就会不同程度的禁封IP,导致无法进行爬虫操作。

解决方法:使用代理池,并设定延迟访问

如何获取代理服务器?免费:西祠代理、快代理、goubanjia 收费:代理精灵等

代码示例:

3 基于cookie反扒

简介:网站会通过cookie跟踪你的访问过程,如果发现有爬虫行为会立刻中断你的访问,比如特别快的填写表单,或者短时间内浏览大量页面。而正确地处理cookie,又可以避免很多采集问题,建议在采集网站过程中,检查一下这些网站生成的cookie,然后想想哪一个是爬虫需要处理的。

解决方法:

一 手动处理

将cookie封装到headers字典中,将该字典作用到get/post方法的headers参数中

二 自动处理

需要两次处理。第一次是为了捕获和存储cookie到session对象中,第二次就是用携带cookie的session进行请求发送,这次请求发送就是携带cookie发起的请求。可以跟requests一样调用get/post进行请求的发送。在使用session进行请求发送的过程中,如果产生了cookie,则cookie会被自动存储session对象中

代码示例:

#基于session自动处理cookiesess = requests.Session()#该次请求只是为了捕获cookie存储到sess中sess.get(url='https://xueqiu.com/',headers=headers)url = 'https://xueqiu.com/v4/statuses/public_timeline_by_category.json?since_id=-1&max_id=20367942&count=15&category=-1'json_data = sess.get(url=url,headers=headers).json()json_data

4 图片懒加载

简介:图片懒加载是一种网页优化技术。图片作为一种网络资源,在被请求时也与普通静态资源一样,将占用网络资源,而一次性将整个页面的所有图片加载完,将大大增加页面的首屏加载时间。为了解决这种问题,通过前后端配合,使图片仅在浏览器当前视窗内出现时才加载该图片,达到减少首屏图片请求数的技术就被称为“图片懒加载”。在网页源码中,在img标签中首先会使用一个“伪属性”(通常使用src2,original......)去存放真正的图片链接而并非是直接存放在src属性中。当图片出现到页面的可视化区域中,会动态将伪属性替换成src属性,完成图片的加载。

解决方法:通过细致观察页面的结构,发现图片的链接真正链的伪属性中,一般不在src中,而是src2中,xpath要使用该属性

示例代码:

5 Ajax动态加载

简介:从网页的 url 加载网页的源代码之后,会在浏览器里执行JavaScript程序。这些程序会加载出更多的内容,并把这些内容传输到网页中。这就是为什么有些网页直接爬它的URL时却没有数据的原因。现在这样的网站也越来越多。
解决方法:使用审查元素分析”请求“对应的链接(方法:右键→审查元素→Network→清空,点击”加载更多“,出现对应的GET链接寻找Type为text/html的,点击,查看get参数或者复制Request URL),循环过程。如果“请求”之前有页面,依据上一步的网址进行分析推导第1页。以此类推,抓取抓Ajax地址的数据。对返回的json使用requests中的json进行解析,观察动态加载的规律,在请求头中对规律进行使用

抓包工具推荐:fiddler

 

最新文章

  1. N-Queens
  2. iOS CoreData 中 objectID 的不变性
  3. Mybatis generator的使用
  4. MongoDB: 数据库复制
  5. Android Webview 背景透明
  6. ssl配置
  7. IOS-验证码的实现和封装(可以直接调用)
  8. diff和patch命令(1)
  9. ●BZOJ 1767 [Ceoi2009]harbingers
  10. Holer实现手机APP应用外网访问本地WEB应用
  11. HTML5 video 播放视频黑屏
  12. gradle 自定义插件 下载配置文件
  13. nobup 与 后台运行命令
  14. GIS入门基础知识点
  15. timerfd与eventfd
  16. http和websocket共用同一端口
  17. 使用Unity中的Box Collider组件完成游戏场景中的碰撞检测功能
  18. FICO(费埃哲)评分系统有什么优缺点?在国内的发展怎么样?
  19. npm 安装 electron 超时
  20. Python的开源人脸识别库:离线识别率高达99.38%

热门文章

  1. Ubuntu16.04安装QQ机器人
  2. Recover刷机简介
  3. Python之open()函数
  4. 前端html学习笔记
  5. 基于 HTML5 WebGL 的 智慧楼宇能源监控系统
  6. [JVM教程与调优] 什么是JVM运行时参数?
  7. 【转】Standardization(标准化)和Normalization(归一化)的区别
  8. LeetCode#1047-Remove All Adjacent Duplicates In String-删除字符串中的所有相邻重复项
  9. iOS 内存分配与分区
  10. git原理,git命令使用详解,github使用 --有此图文并茂原来如此简单