爬虫以前听上去好厉害好神秘的样子,用好了可以成就像Google、百度这样的索索引擎,用不好可以凭借不恰当的高并发分分钟崩掉一个小型网站。写到这里想到12306每年扛住的并发请求量,觉得好牛逼。

爬虫和反爬虫从一直以来都是一个道高一尺魔高一丈的架势。反爬虫技术增加了爬取的难度,各路crawler的爬取过程可以说是一个和各种网站站长斗智斗勇的过程,各种解决方式可谓层出不穷,但是这里说是“简单”解决方案,肯定就是立足于一些比较基础的方法,分分钟就可以上手。

user_agent 伪装和轮换

不同浏览器的不同版本都有不同的user_agent,是浏览器类型的详细信息,也是浏览器提交Http请求的重要头部信息。我们可以在每次请求的时候提供不同的user_agent,绕过网站检测客户端的反爬虫机制。比如说,可以把很多的user_agent放在一个列表中,每次随机选一个用于提交访问请求。有一个提供各种user_agent的网站:

http://www.useragentstring.com/

最近又看到一个专门提供伪装浏览器身份的开源库,名字取得很直白:

fake-useragent

使用代理IP和轮换

检查ip的访问情况是网站的反爬机制最喜欢也最喜欢用的方式。这种时候就可以更换不同的ip地址来爬取内容。当然,你有很多有公网ip地址的主机或者vps是更好的选择,如果没有的话就可以考虑使用代理,让代理服务器去帮你获得网页内容,然后再转发回你的电脑。代理按透明度可以分为透明代理、匿名代理和高度匿名代理:

  • 透明代理:目标网站知道你使用了代理并且知道你的源IP地址,这种代理显然不符合我们这里使用代理的初衷
  • 匿名代理:匿名程度比较低,也就是网站知道你使用了代理,但是并不知道你的源IP地址
  • 高匿代理:这是最保险的方式,目标网站既不知道你使用的代理更不知道你的源IP 
    代理的获取方式可以去购买,当然也可以去自己爬取免费的,这里有一个提供免费代理的网站,可以爬下来使用,但是免费的代理通常不够稳定。

设置访问时间间隔

很多网站的反爬虫机制都设置了访问间隔时间,一个IP如果短时间内超过了指定的次数就会进入“冷却CD”,所以除了轮换IP和user_agent 
可以设置访问的时间间间隔长一点,比如没抓取一个页面休眠一个随机时间:

  1. import time,random
  2. time.sleep(random.random()*3)

对于一个crawler来说,这是一个比较responsible的做法。 
因为本来爬虫就可能会给对方网站造成访问的负载压力,所以这种防范既可以从一定程度上防止被封,还可以降低对方的访问压力。

参考文献

    1. 爬虫伪装浏览器的点击行为
    2. 爬代理IP
    3. 互联网网站的反爬虫策略简析

爬虫IP被禁的简单解决方法的更多相关文章

  1. 爬虫IP被禁的简单解决方法——切换UserAgent

    [转载]Python爬虫之UserAgent 用到的库 https://github.com/hellysmile/fake-useragent

  2. Android 在Fragment中执行onActivityResult不被调用的简单解决方法

    在Android开发中,我们经常会用到FragmentActivity下嵌套多个Fragment,但是在开发过程中会发现在嵌套的Fragment中使用onActivityResult回调方法没有被执行 ...

  3. 虚拟机克隆后导致两台机器的IP都不显示的解决方法

    centos7中输入ifconfig出现ens33,没有eth0,也没有ip,不能上网,输入ifconfig后如下图 之前在网上也找了很多的方法,比如删除文件70-persistent-ipoib.r ...

  4. 获取IP 地址,失败!解决方法

    命令ip addr 获取IP地址失败,见下图: 解决方法,查看ens33网卡的配置: 控制台,路径输入: vi /etc/sysconfig/network-scripts/ifcfg-ens33 然 ...

  5. 修改sudoers权限之后无法sudo的最简单解决方法

    网上百度一下进入recovery模式或是单用户模式仍然修改不了sudoers的权限, 后来终于在网上找到了一种最简单的方法,那就是 pkexec chmod 0440 /etc/sudoers

  6. IOException 简单解决方法

    java.lang.IllegalStateException异常解决方法 这个异常大多数是由文件读取,下载时抛出,但是偶尔也会由类型转换时异常抛出此异常. 错误:Optional int param ...

  7. Linux CentOS 6.5 ifconfig查询不到ip简单解决方法

    最近有小伙伴表示在虚拟机中安装CentOS之后使用ifconfig以及ip addr指令无法查询到ip地址, 在此笔者提供一个简单有效的方法; 1. 切换为root用户登录 su root 2.进入配 ...

  8. 使用IP访问本地网站缓慢解决方法

    运行环境: win7 64位 apache2.4 php-5.6.37 最近由于业务需要,需要使用php5.6版本,所以配套升级了apache到2.4,但升级以后,发现用公司内网IP访问网站非常非常慢 ...

  9. U盘安装centos7.1出现dracut问题的超简单解决方法

    恰好今天有空,于是抽空回忆一下之前U盘安装CENTOS7时遇到的一个大坑.U盘装系统习惯了,就顺手用大白菜工具刻了一个CentOS 7.1的minimun ISO镜像到U盘,于是噩梦开始了.如果有人像 ...

随机推荐

  1. 第5月第24天 线性变换 opengl

    1. http://news.qiyeku.com/news_837979.html 2. opengl + (Class)layerClass { return [CAEAGLLayer class ...

  2. docker之容器访问和网络连接(三)

    前言 当一台服务器上部署了多个应用容器,它们直接可能需要相互通信,比如web应用容器需要访问mysql数据库容器. 主机访问容器 通过映射端口的形式我们可以在外部访问容器内的服务 # 将主机的127. ...

  3. Linux中Samba详细安装【转】

    转自:http://www.cnblogs.com/whiteyun/archive/2011/05/27/2059670.html 为了实现Windows主机与Linux服务器之间的资源共享,Lin ...

  4. mac ssh 自动登陆设置

    1.首先找到.ssh目录 一般在用户名目录下. ls -a查看 如果没有就重新创建一个 chennan@bogon :mkdir .ssh chennan@bogon 查看当前的 bogon:.ssh ...

  5. ORACLE数据库数据文件转移方法(不同于move方法)

    1) 手动拷贝要转移的数据数据文件'd:\OracleData\GWTABLE42.DBF'到新的位置'E:\OracleData\GWTABLE42.DBF'. 2) 把数据文件所属的表空间Offl ...

  6. Android 6.0 变更

    Android 6.0(API 级别 23)除了提供诸多新特性和功能外,还对系统和 API 行为做出了各种变更.本文重点介绍您应该了解并在开发应用时加以考虑的一些主要变更. 如果您之前发布过 Andr ...

  7. 移动端点击300ms延迟

    转载自:http://www.jianshu.com/p/6e2b68a93c88 一.移动端300ms点击延迟 一般情况下,如果没有经过特殊处理,移动端浏览器在派发点击事件的时候,通常会出现300m ...

  8. oracle中循环读出一个表的信息插入到另外一个表中

    declare cursor TAGENTMENUd is select * from TAGENTMENU where 1=1; -- 获取游标begin --遍历查询出的表 (注意 tn是整条记录 ...

  9. 【论文阅读】MEAL: Multi-Model Ensemble via Adversarial Learning

    转载请注明出处:https://www.cnblogs.com/White-xzx/ 原文地址:https://arxiv.org/abs/1812.02425 Github: https://git ...

  10. 关于CCR测评器的自定义校验器(Special Judge)

    引言 有时我们需要使用CCR测评器(CCR-Plus是一个开源的信息学竞赛测评软件,Github链接https://github.com/sxyzccr/CCR-Plus)进行SpecialJudge ...