zoukankan      html  css  js  c++  java
  • $python爬虫防止IP被封的一些措施

    在编写爬虫爬取数据的时候,尤其是爬取大量数据的时候,因为很多网站都有反爬虫措施,所以很容易被封IP,就不能继续爬了。本文就如何解决这个问题总结出一些应对措施,这些措施可以单独使用,也可以同时使用,效果更好。

    伪造User-Agent

    在请求头中把User-Agent设置成浏览器中的User-Agent,来伪造浏览器访问。比如:

    headers = {'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36'}
    resp = requests.get(url,headers = headers)
    

    在每次重复爬取之间设置一个随机时间间隔

    # 比如:
    time.sleep(random.randint(0,3))  # 暂停0~3秒的整数秒,时间区间:[0,3]
    # 或:
    time.sleep(random.random())  # 暂停0~1秒,时间区间:[0,1)
    

    伪造cookies

    若从浏览器中可以正常访问一个页面,则可以将浏览器中的cookies复制过来使用,比如:

    cookies = dict(uuid='b18f0e70-8705-470d-bc4b-09a8da617e15',UM_distinctid='15d188be71d50-013c49b12ec14a-3f73035d-100200-15d188be71ffd')
    resp = requests.get(url,cookies = cookies)
    
    # 把浏览器的cookies字符串转成字典
    def cookies2dict(cookies):
        items = cookies.split(';')
        d = {}
        for item in items:
            kv = item.split('=',1)
            k = kv[0]
            v = kv[1]
            d[k] = v
        return d
    

    注:用浏览器cookies发起请求后,如果请求频率过于频繁仍会被封IP,这时可以在浏览器上进行相应的手工验证(比如点击验证图片等),然后就可以继续正常使用该cookies发起请求。

    使用代理

    可以换着用多个代理IP来进行访问,防止同一个IP发起过多请求而被封IP,比如:

    proxies = {'http':'http://10.10.10.10:8765','https':'https://10.10.10.10:8765'}
    resp = requests.get(url,proxies = proxies)
    # 注:免费的代理IP可以在这个网站上获取:http://www.xicidaili.com/nn/
    
  • 相关阅读:
    欧拉函数
    新博客地址
    socket编程
    文件操作
    python安装扩展”unable to find vcvarsall.bat“的解决办法
    PYTHON以及插件安装
    梯式结构
    PHPSTORM配置
    CSRF攻击
    js的一些奇葩用法
  • 原文地址:https://www.cnblogs.com/jiayongji/p/7143662.html
Copyright © 2011-2022 走看看