Python爬虫开发:反爬虫措施以及爬虫编写注意事项

反爬虫的几重措施

1.IP限制

如果是个人编写的爬虫,IP可能是固定的,那么发现某个IP请求过于频繁并且短时间内访问大量的页面,有爬虫的嫌疑,作为网站的管理或者运维人员,你可能就得想办法禁止这个IP地址访问你的网页了。那么也就是说这个IP发出的请求在短时间内不能再访问你的网页了,也就暂时挡住了爬虫。

2.User-Agent

User-Agent是用户访问网站时候的浏览器的标识

下面我列出了常见的几种正常的系统的User-Agent大家可以参考一下,

并且在实际发生的时候,根据浏览器的不同,还有各种其他的User-Agent,我举几个例子方便大家理解:

safari 5.1 – MAC

User-Agent:Mozilla/5.0 (Macintosh; U; IntelMac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1Safari/534.50

Firefox 4.0.1 – MAC

User-Agent: Mozilla/5.0 (Macintosh; IntelMac OS X 10.6; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

Firefox 4.0.1 – Windows

User-Agent:Mozilla/5.0 (Windows NT 6.1;rv:2.0.1) Gecko/20100101 Firefox/4.0.1

同样的也有很多的合法的User-Agent,只要用户访问不是正常的User-Agent极有可能是爬虫再访问,这样你就可以针对用户的User-Agent进行限制了。

3、 验证码反爬虫

这个办法也是相当古老并且相当的有效果,如果一个爬虫要解释一个验证码中的内容,这在以前通过简单的图像识别是可以完成的,但是就现在来讲,验证码的干扰线,噪点都很多,甚至还出现了人类都难以认识的验证码(某二三零六)。

4.Ajax异步加载

5.Noscript标签的使用

<noscript>标签是在浏览器(或者用户浏览标识),没有启动脚本支持的情况下触发的标签,在低级爬虫中,基本都没有配置js引擎,通常这种方式和Ajax异步加载同时使用。用于保护自己不想让爬虫接触的信息。

6.Cookie限制

第一次打开网页会生成一个随机cookie,如果再次打开网页这个cookie不存在,那么再次设置,第三次打开仍然不存在,这就非常有可能是爬虫在工作了。很简单,在三番屡次没有带有该带的cookie,就禁止访问。

爬虫编写注意事项

在这一部分,笔者希望就自己的经验给大家编写爬虫提供比较可行的建议,也为大家提一个醒:

1.道德问题,是否遵守robots协议;

2.小心不要出现卡死在死循环中,尽量使用urlparser去解析分离url决定如何处理,如果简单的想当然的分析url很容易出现死循环的问题;

3.单页面响应超时设置,默认是200秒,建议调短,在网络允许的条件下,找到一个平衡点,避免所有的爬虫线程都在等待200,结果出现效率降低;

4.高效准确的判重模式,如果判重出现问题,就会造成访问大量已经访问过的页面浪费时间;

5.可以采用先下载,后分析的方法,加快爬虫速度;

6.在异步编程的时候要注意资源死锁问题;

7.定位元素要精准(xpath)尽量避免dirty data。

希望大家提出自己的意见,本系列大多数时间都在从微观的角度讲爬虫各个部件的解决方案。

需要相关资料的可以扫码领取【爬虫】

大佬带你详解Python反爬虫措施以及爬虫编写注意事项相关推荐

  1. scrapy爬虫储存到mysql_详解Python之Scrapy爬虫教程NBA球员数据存放到Mysql数据库

    获取要爬取的URL 爬虫前期工作 用Pycharm打开项目开始写爬虫文件 字段文件items # Define here the models for your scraped items # # S ...

  2. 详解Python正则表达式之: (?Pname…) named group 带命名的组

    2019独角兽企业重金招聘Python工程师标准>>> Python 2.7的手册中的解释: (?P<name>...) Similar to regular paren ...

  3. 简书大佬的笔记:一篇文章带你详解 HTTP 协议(网络协议篇一)

    一篇文章带你详解 HTTP 协议(网络协议篇一) 本篇文章篇幅比较长,先来个思维导图预览一下. 一张图带你看完本篇文章 一.概述 1.计算机网络体系结构分层 计算机网络体系结构分层 2.TCP/IP ...

  4. python获取mp3音频数据_详解python进行mp3格式判断 python怎么读取mp3文件

    python中哪个库有em算法 EM算法初稿2016-4-28 初始化三个一维的高斯分布 from numpy import * import numpy as np import matplotli ...

  5. python open 打开是什么类型的文件-详解Python中open()函数指定文件打开方式的用法...

    文件打开方式 当我们用open()函数去打开文件的时候,有好几种打开的模式. 'r'->只读 'w'->只写,文件已存在则清空,不存在则创建. 'a'->追加,写到文件末尾 'b'- ...

  6. 文件不能断点 webstorm_详解python使用金山词霸的翻译功能(调试工具断点的使用)...

    这篇文章主要介绍了详解python使用金山词霸的翻译功能(调试工具断点的使用),本文给大家介绍得非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下 今天试着用python获取金山 ...

  7. pythonnamedtuple定义类型_详解Python中namedtuple的使用

    namedtuple是Python中存储数据类型,比较常见的数据类型还有有list和tuple数据类型.相比于list,tuple中的元素不可修改,在映射中可以当键使用. namedtuple: na ...

  8. python命令提示符窗口在哪里_详解python命令提示符窗口下如何运行python脚本

    以arcgispro的python脚本为例在arcgispro自带的python窗口下运行python脚本 需求: 将arcgispro的.aprx项目包中gdb的数据源路径更换为sde数据源路径. ...

  9. python变量定义大全_详解python变量与数据类型

    这篇文章我们学习 Python 变量与数据类型 变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念,变量可以通过变量名访问.在 Python 中 变量命名规定,必须是大小写英文,数字 ...

最新文章

  1. 计算Android屏幕解锁组合数
  2. 三星手机Android9和10的区别,三星开始在Galaxy Note 9上测试Android 10
  3. kaggle-Santander 客户交易预测总结
  4. OpenStack的部署T版(五)——Nova组件
  5. 关于gitgithub的操作
  6. markdown与word相互转换的快捷方法
  7. 东哥读书小记 之 《MacTalk人生元编程》
  8. python pyqt教程_『开发技巧』PyQt5入门教程
  9. SQL语句的解析过程
  10. 卷积神经网络训练准确率突然下降_从MobileNet看轻量级神经网络的发展
  11. Openlayers 杂项
  12. 平稳时间序列的相关概念
  13. 三维地震数据segy数据显示
  14. 打印机 计算机 usb,电脑没法识别打印机(USB接口)
  15. github | 马赛克去除项目
  16. 在 Nebula K8s 集群中使用 nebula-spark-connector 和 nebula-algorithm
  17. ribbon整合eureka时报错Request URI does not contain a valid hostname: xxxx
  18. 全文检索服务 _ ElasticSearch
  19. python average函数怎么用,Python Numpy MaskedArray.average()用法及代码示例
  20. vertica资源管理

热门文章

  1. R语言ggplot2可视化:使用patchwork包绘制ggplot2可视化结果的组合图(自定义图像的嵌入关系)、使用patchwork包绘制ggplot2可视化结果的组合图(自定义组合形式)
  2. R语言ggplot2可视化自定义多个图例(legend)标签之间的距离实战(例如,改变数据点颜色和数据点大小图例之间的距离)
  3. R语言可视化韦恩图实战:VENN DIAGRAM
  4. R语言将多张可视化结果图像保存到PDF中实战:多图保存到同一PDF页、将多个绘图保存到PDF格式的不同页面
  5. Python多分类问题下,micro-PR计算以及macro-PR计算
  6. Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...): singular fit encountered
  7. 机器学习误差分析(Error Analysis)实战
  8. 四十而不惑——DNA测序技术的前世今生和未来
  9. python 修改列表中的元素
  10. 5.Collection集合 List集合 泛型