• 爬虫学习笔记:创建随机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池

  • 相关阅读:
    作业
    第四次作业
    第三次作业
    作业
    第4次作业
    第3次作业,c语言
    第二次作业
    黄义方 作业4
    课堂作业
    第三次作业
  • 原文地址:https://www.cnblogs.com/hider/p/15678884.html
Copyright © 2020-2023  润新知