应对反爬虫最简单的策略——随机UA+递归request

在爬取信息的过程中,最烦的莫过于程序报出各种代码的网络连接的错误,类似HTTP ERROR、WIN ERROR 10060等等。那么遇到这种情况怎么办呢,有以下几种解决途径:

(1)添加UA头

这个一般都会做,请求的时候requests.get(url,headers=headers)

这里有一个UA头的大全集,可以参考一下:

user_agent_list = [

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/22.0.1207.1 Safari/537.1",

"Mozilla/5.0 (X11; CrOS i686 2268.111.0) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1092.0 Safari/536.6",

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.6 (KHTML, like Gecko) Chrome/20.0.1090.0 Safari/536.6",

"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/19.77.34.5 Safari/537.1",

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.9 Safari/536.5",

"Mozilla/5.0 (Windows NT 6.0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.36 Safari/536.5",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",

"Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_0) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1062.0 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3",

"Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.0 Safari/536.3",

"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",

"Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/535.24 (KHTML, like Gecko) Chrome/19.0.1055.1 Safari/535.24",

"Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_2 like Mac OS X) App leWebKit/537.51.2 (KHTML, like Gecko) Version/7.0 Mobile/11D257 Safari/9537.53"

]

UA=random.choice(user_agent_list)#获取随机的User_Agent

headers={'User_Agent':UA}

(2)设置等待间隔,过一会儿再申请

time.sleep(seconds)用来使程序休息一会,否则过高的爬取速度会让目标服务器的带宽负载受不了的,大多数网站服务器会做一些简单的反爬虫,它检测出指向你的IP地址的机器不停地请求数据,根本不像正常人类行为,就有可能会把你封掉。因此,不要急,慢慢来。在最后一步需要频繁抓取的代码里加上time.sleep()函数,等个两三秒再爬。

此外,递归request是个好方法,当一次请求失败时,我先停上8秒(向百度网盘致敬),然后再重新请求页面,如果再失败,我再停上8秒,再请求……这个过程是很明显的递归。代码如下:

def auto_request(img_href):

         global imgrealhtml

          try:

                 UA=random.choice(user_agent_list)#获取随机的User_Agent

                headers={'User_Agent':UA}

                imgrealhtml=requests.get(img_href,headers=headers)

          except:

                time.sleep(8)

                print(u'请稍等,8秒后重新下载')

                auto_request(img_href)

            return imgrealhtml

注意:我对于global imgrealhtml 进行了加粗处理,一定要加上这句话,如果没有的话,当第一次请求失败执行except语句的时候会报错,因为这是一个全局函数,imgrealhtml默认是一个全局变量,如果第一次失败,内存中已经产生了一个imgrealhtml,执行except语句的时候,再从头开始执行,又产生了一个imgrealhtml,这样imgrealhtml的值发生了改变,而python就会认为imgrealhtml是一个局部变量,与全局变量的设定相矛盾。因此要先声明global。

(3)IP代理和TOR

大名鼎鼎的VPN就是用来做这个的。很多VPN的花费并不高,速度不太快,连接不太好的甚至还有免费的,注册一下送180天。

网络上有很多免费的IP代理,经我实际检验,基本上都不行,如果想用有效的,还是要花点钱买资源。

TOR洋葱路由(The Onion Router)网络,常用缩写为 Tor,是一种 IP 地址匿名手段。由网络志愿者服务器构建的洋葱路由器网络,通过不同服务器构成多个层(就像洋葱)把客户端包在最里面。数据进入网络之前会被加密,因此任何服务器都不能偷取通信数据。另外,虽然每一个服务器的入站和出站通信都可以被查到,但是要想查出通信的真正起点和终点,必须知道整个通信链路上所有服务器的入站和出站通信细节,而这基本是不可能实现的。

总结:

其实对于一般的小网站(非百度 淘宝 等大型网站),递归request+随机UA头的方法基本上够用了,如果不是非常必要,比如自己的IP被封了(HTTP error :403 Forbidden),不要去用IP代理,很影响速度,而且常常连接不上。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、基础知识篇:Http Header之User-AgentUser Agent中文名为用户代理,是Http协议中...
    iPhone阅读 16,139评论 0 13
  • 目录 前言 安装环境Debian / Ubuntu / Deepin 下安装Windows 下安装 基本使用初始化...
    无口会咬人阅读 12,240评论 2 45
  • 在互联网上抓取数据的时候,经常需要程序伪装成浏览器来避开服务端的一些限制,这是收集的一些浏览器的User-Agen...
    venter_zhu阅读 12,155评论 0 14
  • 贴出代码以供大家共享,其实爬虫很简单,难的是突破反爬虫,今天看了一些反爬虫的资料,明天或后天整理一下,写上一篇文章...
    八神苍月阅读 4,367评论 0 3
  • 或叹此生孑一人 或感病中予独怀 又和谁道春前湖畔几人待 捏碎流萤执笔流年写尘埃 星河坠遍三万字,到底初心不改 回首...
    初见如你阅读 3,838评论 0 0