zoukankan      html  css  js  c++  java
  • 爬虫学习笔记:创建随机UserAgent池

    一、背景介绍

    User-Agent 即用户代理,简称 UA

    它是一个特殊字符串,使得服务器能够识别客户使用的操作系统及版本、CPU类型、浏览器版本、浏览器渲染引擎、浏览器语言、浏览器插件等。

    具备反爬措施的网站,通过判断 UA 的合理性,来响应请求,判断请求是否合法。

    UA 的标准格式为:

    浏览器标识(操作系统标识;加密等级标识;浏览器语言)渲染引擎标识 版本信息
    # Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)
    # Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0
    
    • Mozilla/5.0 -- 网景公司浏览器的标识,由于互联网初期浏览器市场主要被网景公司占领,很多服务器被设置成仅响应含有标志为 Mozilla 的浏览器的请求,因此,新款的浏览器为了打入市场,不得不加上这个字段。
    • Windows NT 5.1 -- Windows XP 的标识符
    • WOW64 -- 32位系统运行在64位处理器上
    • AppleWebKit/535.11 -- 苹果公司开发的渲染引擎
    • KHTML -- Linux 平台中 Konqueror 浏览器的呈现引擎 KHTML
    • Gechko -- 呈现引擎
    • like Gechko -- 表示其行为与 Gechko 浏览器引擎类似

    二、User-Agent池

    绕过反爬的有效方法是利用 User-Agent 池随机生成 UA

    1.方法一

    # 构造随机函数
    def get_ua():
        import random
        user_agents = [
            'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60',
    		'Opera/8.0 (Windows NT 5.1; U; en)',
    		'Mozilla/5.0 (Windows NT 5.1; U; en; rv:1.8.1) Gecko/20061208 Firefox/2.0.0 Opera 9.50',
    		'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 9.50',
    		'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0',
    		'Mozilla/5.0 (X11; U; Linux x86_64; zh-CN; rv:1.9.2.10) Gecko/20100922 Ubuntu/10.10 (maverick) Firefox/3.6.10',
    		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2 ',
    		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36',
    		'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
    		'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.133 Safari/534.16',
    		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36',
    		'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko',
    		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.11 TaoBrowser/2.0 Safari/536.11',
    		'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.71 Safari/537.1 LBBROWSER',
    		'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 732; .NET4.0C; .NET4.0E)',
    		'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.84 Safari/535.11 SE 2.X MetaSr 1.0',
    		'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; SV1; QQDownload 732; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0) ',
        ]
        user_agent = random.choice(user_agents) # 随机抽取对象
        return user_agent
    
    # 调用
    get_ua()
    

    2.方法二

    # 构造随机函数
    def get_ua():
        import random
        first_num = random.randint(55, 76)
        third_num = random.randint(0, 3800)
        fourth_num = random.randint(0, 140)
        os_type = ['(Windows NT 6.1; WOW64)', '(Windows NT 10.0; WOW64)', '(X11; Linux x86_64)', '(Macintosh; Intel Mac OS X 10_14_5)']
        chrome_version = 'Chrome/{}.0.{}.{}'.format(first_num, third_num, fourth_num)
        ua = ' '.join(['Mozilla/5.0', random.choice(os_type), 'AppleWebKit/537.36', '(KHTML, like Gecko)', chrome_version, 'Safari/537.36'])
        return ua
    
    # 调用
    get_ua()
    

    3.实操

    import requests
    
    def get_page(url):
        ua = get_ua()
        headers = {'User-Agent': ua}
        response = requests.get(url=url, headers=headers)
        print(response.text)
    
    if __name__ == '__main__':
        get_page('https://www.baidu.com')
    

    参考链接:创建一个UA池(User-Agent)

    参考链接:Python反爬手段之User-Agent池

  • 相关阅读:
    Python for Infomatics 第14章 数据库和SQL应用四(译)
    展望2017
    bing的简单英文字典工具
    自我安慰
    Python for Infomatics 第14章 数据库和SQL应用三(译)
    Python for Infomatics 第14章 数据库和SQL应用二(译)
    Python for Infomatics 第14章 数据库和SQL应用一(译)
    希望父亲早日恢复
    Python for Infomatics 第13章 网页服务四(译)
    Python for Infomatics 第13章 网页服务三(译)
  • 原文地址:https://www.cnblogs.com/hider/p/15678884.html
Copyright © 2011-2022 走看看