urllib,request 设置代理
通常防止爬虫被反主要有以下几个策略:
1.动态设置User-Agent(随机切换User-Agent,模拟不同用户的浏览器信息)
2.使用IP地址池:v*n和代理IP,现在大部分网站都是根据IP来ban的。
3.禁用Cookies(也就是不启用cookies middleware,不向Server发送cookies,有些网站通过cookie的使用发现爬虫行为)
4.可以通过COOKIES_ENABLED 控制 CookiesMiddleware 开启或关闭
5.设置延迟下载(防止访问过于频繁,设置为 2秒 或更高)要明白爬虫重要的是拿到数据。
6.Google Cache 和 Baidu Cache:如果可能的话,使用谷歌/百度等搜索引擎服务器页面缓存获取页面数据。
7.使用 Crawlera(专用于爬虫的代理组件),正确配置和设置下载中间件后,项目所有的request都是通过crawlera发出。
反爬第一招,动态设置User-Agent:
怎么动态设置?其实就是事先准备一堆User-Agent.每次发送请求时就从中间随机选取一个。有些网站反爬检查user-agent的话就可以骗过去了。
采用 random随机模块的choice方法随机选择User-Agent,这样每次请求都会从中选择,请求很频繁的话就多找几个user-agent。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def load_page(url, form_data):
USER_AGENTS = [
"Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)" ,
"Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)" ,
"Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)" ,
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)" ,
"Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6" ,
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1" ,
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0" ,
"Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5"
]
user_agent = random.choice(USER_AGENTS)
headers = {
'User-Agent' :user_agent
}
|
实例代码有道翻译:
反爬第二招,使用代理IP,这是爬虫/反爬虫的第二大招,通常也是最好用的。
很多网站会检测某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多的不像正常人,它会禁止这个IP的访问。
所以我们可以设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。
urllib2中通过ProxyHandler来设置使用代理服务器
ProxyHandler处理器(代理设置): 这样就设置了一个无需认证的代理
1
2
3
4
5
6
7
8
9
10
11
|
import urllib2
#设置一个代理hander httpproxy_handler = urllib2.ProxyHandler({ "http" : "124.88.67.81:80" })
opener = urllib2.build_opener(httpproxy_handler)
request = urllib2.Request( "http://www.baidu.com/" )
response = opener. open (request)
print response.read()
|
如果代理IP足够多,就可以随机选择一个代理去访问网站。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import urllib2
import random
proxy_list = [
{ "http" : "124.88.67.81:80" },
{ "http" : "124.88.67.81:80" },
{ "http" : "124.88.67.81:80" },
{ "http" : "124.88.67.81:80" },
{ "http" : "124.88.67.81:80" }
] # 随机选择一个代理 proxy = random.choice(proxy_list)
# 使用选择的代理构建代理处理器对象 httpproxy_handler = urllib2.ProxyHandler(proxy)
opener = urllib2.build_opener(httpproxy_handler)
request = urllib2.Request( "http://www.baidu.com/" )
response = opener. open (request)
print response.read()
|
( ProxyHandler 代理授权验证)
上面都是一些免费代理写法,下面这个是付费代理写法:
1
2
3
4
5
6
7
|
proxy = urllib2.ProxyHandler({ "http" : "账号:密码@143.226.164.130:16816" })
opener = urllib2.build_opener(proxy)
repsonse = opener. open (url)
print repsonse.read()
|
requset 模块设置代理方法:
request 模块比较简单。
普通代理
import requests # 根据协议类型,选择不同的代理 proxies = { "http": "http://12.34.56.79:9527", "https": "http://12.34.56.79:9527", } response = requests.get("http://www.baidu.com", proxies = proxies) print response.text
私密代理
import requests # 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式: proxy = { "http": "账号:密码@61.158.163.130:16816" } response = requests.get("http://www.baidu.com", proxies = proxy) print response.text
没钱买代理?免费代理来搞定(便宜没好货,这个是真理),免费代理不稳定,速度慢,要是公司用老兄赶紧让你老板买代理去(没有金刚钻,怎么揽瓷器活),
好吧,要是个人玩玩的自己 去爬点免费代理来用用。你老哥我用scrapy写来了个爬取快代理的ip。如果你懒得写的话,copy将就着用吧。里面的代理应该用不了,自己去找几个替换了玩玩!爬下来的数据存在了 data/kdl.json
http://www.djf2649.cn/
http://www.hvc6084.cn/
http://www.opg6486.cn/
http://www.hud3144.cn/
http://www.iit3286.cn/
http://www.wyu4949.cn/
http://www.lus6696.cn/
http://www.epi0997.cn/
http://www.rdk6709.cn/
http://www.lwa7903.cn/
http://www.kjx4882.cn/
http://www.nwf3326.cn/
http://www.thy6127.cn/
http://www.xho5322.cn/
http://www.bfc2814.cn/
http://www.lhl7110.cn/
http://www.kpx1618.cn/
http://www.prl0026.cn/
http://www.bxb7451.cn/
http://www.ube1531.cn/
http://www.qnu9925.cn/
http://www.hxl6493.cn/
http://www.ric5056.cn/
http://www.ibs2142.cn/
http://www.mco2769.cn/
http://www.tzr5175.cn/
http://www.vsb9575.cn/
http://www.eho1460.cn/
http://www.dyy3200.cn/
http://www.tdw5546.cn/
http://www.mtj9347.cn/
http://www.osi0013.cn/
http://www.bjb5476.cn/
http://www.ghk5310.cn/
http://www.xjy3902.cn/
http://www.grp2563.cn/
http://www.lkg4662.cn/
http://www.vwb8311.cn/
http://www.mmw6064.cn/
http://www.cqz7056.cn/
http://www.nlk4583.cn/
http://www.adw2245.cn/
http://www.alj9141.cn/
http://www.vdf1425.cn/
http://www.miv2453.cn/
http://www.vdx0926.cn/
http://www.smc5776.cn/
http://www.ffn3573.cn/
http://www.rdj9135.cn/
http://www.mtu9335.cn/
http://www.gzv8338.cn/
http://www.xum5501.cn/
http://www.jiq1934.cn/
http://www.syh5891.cn/
http://www.yvr8830.cn/
http://www.aua2439.cn/
http://www.ath0401.cn/