zoukankan      html  css  js  c++  java
  • Python爬虫实例(三)代理的使用

    一些网站会有相应的反爬虫措施,例如很多网站会检测某一段时间某个IP的访问次数,如果访问频率太快以至于看起来不像正常访客,它可能就会会禁止这个IP的访问。所以我们需要设置一些代理服务器,每隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。

    在Python中,可以使用urllib2中的ProxyHandler来设置使用代理服务器,下面通过代码说明如何来使用代理:

    import urllib2
    
    # 构建了两个代理Handler,一个有代理IP,一个没有代理IP
    httpproxy_handler = urllib2.ProxyHandler({"http" : "124.88.67.81:80"})
    nullproxy_handler = urllib2.ProxyHandler({})
    #定义一个代理开关
    proxySwitch = True 
    # 通过 urllib2.build_opener()方法使用这些代理Handler对象,创建自定义opener对象
    # 根据代理开关是否打开,使用不同的代理模式
    if proxySwitch:  
        opener = urllib2.build_opener(httpproxy_handler)
    else:
        opener = urllib2.build_opener(nullproxy_handler)
    
    request = urllib2.Request("http://www.baidu.com/")
    
    # 使用opener.open()方法发送请求才使用自定义的代理,而urlopen()则不使用自定义代理。
    response = opener.open(request)
    
    # 就是将opener应用到全局,之后所有的,不管是opener.open()还是urlopen() 发送请求,都将使用自定义代理。
    # urllib2.install_opener(opener)
    # response = urlopen(request)
    
    print response.read()

    上面使用的是免费的开放代理,我们可以在一些代理网站上收集这些免费代理,测试后如果可以用,就把它收集起来用在爬虫上面。

    免费代理网站:

    西刺免费代理

    快代理免费代理

    全国代理ip

    如果你有足够多的代理,可以放在一个列表中,随机选择一个代理去访问网站。如下:

    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()

    上面使用的都是免费代理,不是很稳定,很多时候会出现无法使用的情况,这时候可以考虑使用私密代理。也就是向代理供应商购买代理,供应商会提供一个有效代理,并且有自己的用户名和密码,具体使用和免费代理一样,这是多了一个账户认证,如下:

    # 构建具有一个私密代理IP的Handler,其中user为账户,passwd为密码
    httpproxy_handler = urllib2.ProxyHandler({"http" : "user:passwd@124.88.67.81:80"})

    上面就是使用urllib2设置代理的方法,不过看起来有些麻烦,下面我们看看如何使用reqursts来使用代理。

    使用免费代理:

    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": "mr_mao_hacker:sffqry9r@61.158.163.130:16816" }
    
    response = requests.get("http://www.baidu.com", proxies = proxy)
    
    print response.text

    这样看起来简单不少。

    注:可以将账户密码写入环境变量以免泄露

  • 相关阅读:
    A
    N
    M
    L
    K
    J
    sass
    通过ps给透明通道的图片添加灰度(适用于需要兼容IE7,效果很好)
    CSS十一问——好奇心+刨根问底=CSSer
    清除浮动的7种方法
  • 原文地址:https://www.cnblogs.com/xinyangsdut/p/7625714.html
Copyright © 2011-2022 走看看