反爬利器--设置代理服务器
1. 代理简介
很多网站都会检测某一段时间某个ip的访问次数,如果同一个ip访问过于频繁,那么该网站就会禁止来自该ip的访问,针对这种情况,可以使用代理服务器,每隔一段时间换一个马甲。“他强任他强,劳资会变翔”哈哈哈。
免费的开放代理获取无成本,我们可以收集这些免费代理,测试后如果可以用,用在爬虫上。
免费短期代理网站举例:
名词解释:
免费短期代理网站分高匿和透明
【高匿】:代表服务器追踪不到你原来的ip;
【透明】:代表服务器可以追踪到你的代理ip和原来的ip;
类型表示支持的类型:http或者https
【存活的时间】:表示在这个期间可用
2.设置代理服务器
urllib.request中通过proxyhandler来设置使用代理服务器,下面代码说明如何使用自定义opener来使用代理:
例子1:单个代理ip
1 import urllib.request 2 3 # 构建两个代理handler,一个有代理ip,一个没有 4 httpproxy_handler = urllib.request.proxyhandler({"http": "211.141.111.114:61395"}) 5 nullproxy_handler = urllib.request.proxyhandler({}) 6 proxy_switch = true # 定义一个代理开关 7 8 # 通过urllib.request.build_opener() 方法创建自定义opener对象 9 # 根据代理开关是否打开,使用不同的代理模式 10 if proxy_switch: 11 opener = urllib.request.build_opener(httpproxy_handler) 12 else: 13 opener = urllib.request.build_opener(nullproxy_handler) 14 15 request = urllib.request.request("http://www.baidu.com") 16 response = opener.open(request) 17 print(response.read())
注意:
如果程序中所有的请求都使用自定义的opener, 可以使用urllib.install_opener()将自定义的opener定义为全局opener,表示之后凡是调用urlopen,都将使用自定义的opener。
例子2:代理ip列表随机抽取
如果代理ip足够多,就可以像随机获取user-agent一样,随机选择一个代理去访问网站。
1 import urllib.request 2 import random 3 4 proxy_list = [ 5 {"http": "211.141.111.114:61395"}, 6 {"http": "61.135.217.7:80"}, 7 {"http": "171.39.74.97:8123"}, 8 {"http": "218.59.228.18:61976"}, 9 {"http": "221.224.136.211:35101"}, 10 ] 11 12 # 随机选择一个代理 13 proxy = random.choice(proxy_list) 14 15 # 使用选择的代理构建代理处理器对象 16 httpproxy_handler = urllib.request.proxyhandler(proxy) 17 opener = urllib.request.build_opener(httpproxy_handler) 18 request = urllib.request.request("http://www.baidu.com") 19 response = opener.open(request) 20 print(response.read())
这些免费开放代理一般会有很多人都在使用,而且代理有寿命短,速度慢,匿名度不高,http/https支持不稳定等缺点(免费没好货)。
所以,专业爬虫工程师或爬虫公司会使用高品质的私密代理,这些代理通常需要找专门的代理供应商购买,再通过用户名/密码授权使用。
上一篇: 五个免费开源的数据挖掘软件
下一篇: PHP web项目中用到的一些函数