爬蟲(自學)之User Agent 第三方庫my_fake_useragent 和 fake_useragent


  • my_fake_useragent 和 fake_useragent實質基本一致,可以調用里面的方法User Agent
    •   例my_fake_useragent 底層
class UserAgent():
    parsed_json_data = load_parsed_json_data()

    def __init__(self,
                 family=None,
                 os_family=None,
                 phone=None,
                 version_range=None,
                 ):
        """

        :param mode: default mode
        :param family: 不設置則不管 指定瀏覽器類型
        :param os_family: 不設置則不管 指定操作系統
        :param phone: 指定是否是手機端 True 是 False 不是 不設置默認None則不管
        :param version_range: 不設置則不管 指定瀏覽器版本范圍

        手機檢測 根據設備family參數之外 操作系統檢測到 android 或 ios 也認為是移動端

        """

        if isinstance(family, str):
            family = family.lower()
            self.family = [family]
        elif isinstance(family, (list, tuple)):
            self.family = [f.lower() for f in family]
        elif family is None:
            self.family = None
        else:
            raise ValueError('family')

        if isinstance(os_family, str):
            os_family = os_family.lower()
            self.os_family = [os_family]
        elif isinstance(os_family, (list, tuple)):
            self.os_family = [f.lower() for f in os_family]
        elif os_family is None:
            self.os_family = None
        else:
            raise ValueError('os_family')

        self.phone = phone
        if self.phone not in [None, True, False]:
            raise ValueError('phone')

        self.version_range = version_range

        self.filter_func = build_stream_function(filter_family,
                                                 filter_os_family, filter_phone,
                                                 filter_version_range)

    def random(self):
        user_agent_list = self.get_useragent_list()

        if user_agent_list:
            return random.choice(user_agent_list)
        else:
            raise Exception('empty result')

    def get_useragent_list(self):
        origin_data = []
        for key in self.parsed_json_data:
            origin_data += self.parsed_json_data[key]

        d = {
            'data': origin_data,
            'family': self.family,
            'version_range': self.version_range,
            'os_family': self.os_family,
            'phone': self.phone
        }

        d = self.filter_func(d)

        ua_string_list = [i['string'] for i in d['data']]
        return ua_string_list

    def test_possible_family(self):
        t1 = set()
        for k, v in self.parsed_json_data.items():
            for i in v:
                t1.add(i['user_agent']['family'])
        return t1

    def test_possible_os_family(self):
        t1 = set()
        for k, v in self.parsed_json_data.items():
            for i in v:
                t1.add(i['os']['family'])
        return t1

    def test_possible_device_family(self):
        t1 = set()
        for k, v in self.parsed_json_data.items():
            for i in v:
                t1.add(i['device']['family'])
        return t1
  •   調用方法

  • 轉自百度百科判定
一些網站常常通過判斷 UA 來給不同的操作系統、不同的瀏覽器發送不同的頁面,因此可能造成某些頁面無法在某個瀏覽器中正常顯示,但通過偽裝 UA 可以繞過檢測。
瀏覽器的 UA 字串
標准格式為: 瀏覽器標識 (操作系統標識; 加密等級標識; 瀏覽器語言) 渲染引擎標識 版本信息
瀏覽器標識
由於很多網站在進行 UA 檢測的時候忽略了兩位數版本號,所以可能造成 瀏覽器及之后版本收到糟糕的頁面,因此自 瀏覽器 10 之后的版本中瀏覽器標識項固定為 瀏覽器,在 UA 字串尾部添加真實版本信息。
操作系統標識 FreeBSD X11; FreeBSD (version no.) i386 X11; FreeBSD (version no.) AMD64 Linux X11; Linux ppc X11; Linux ppc64 X11; Linux i686 X11; Linux x86_64 Mac Macintosh; PPC Mac OS X Macintosh; Intel Mac OS X Solaris X11; SunOS i86pc X11; SunOS sun4u Windows: Windows NT 10.0 對應操作系統windows 10 windows NT 6.2 對應操作系統 windows 8 Windows NT 6.1 對應操作系統 windows 7 Windows NT 6.0 對應操作系統 windows vista Windows NT 5.2 對應操作系統 windows 2003 Windows NT 5.1 對應操作系統 windows xp Windows NT 5.0 對應操作系統 windows 2000 Windows ME Windows 98 加密等級標識 N: 表示無安全加密 I: 表示弱安全加密 U: 表示強安全加密 瀏覽器語言 在首選項 > 常規 > 語言中指定的語言 渲染引擎 瀏覽器 使用 Presto 渲染引擎,格式為: Presto/版本號 版本信息 顯示 瀏覽器 真實版本信息,格式為: Version/版本號

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM