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
    }

  

urllib,request 设置代理 View Code

 

实例代码有道翻译:

urllib,request 设置代理

 

 

 

反爬第二招,使用代理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 模块比较简单。

普通代理

urllib,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
urllib,request 设置代理

 

私密代理

urllib,request 设置代理
import requests

# 如果代理需要使用HTTP Basic Auth,可以使用下面这种格式:
proxy = { "http": "账号:密码@61.158.163.130:16816" }

response = requests.get("http://www.baidu.com", proxies = proxy)

print response.text
 
urllib,request 设置代理

 

没钱买代理?免费代理来搞定(便宜没好货,这个是真理),免费代理不稳定,速度慢,要是公司用老兄赶紧让你老板买代理去(没有金刚钻,怎么揽瓷器活),

好吧,要是个人玩玩的自己 去爬点免费代理来用用。你老哥我用scrapy写来了个爬取快代理的ip。如果你懒得写的话,copy将就着用吧。里面的代理应该用不了,自己去找几个替换了玩玩!爬下来的数据存在了 data/kdl.json 

 

urllib,request 设置代理

 

urllib,request 设置代理 items
urllib,request 设置代理 Pipelines
urllib,request 设置代理 kdl
urllib,request 设置代理 middlewares
urllib,request 设置代理 settings

 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/