zoukankan      html  css  js  c++  java
  • 设备指纹识别之User Agent 解析

     设备指纹识别之User Agent 解析User Agent 解析

    zoerywzhou@163.com

    http://www.cnblogs.com/swje/

    作者:Zhouwan

     2017-4-6


     最近由于设备指纹识别项目需要,想要解析UserAgent(用户代理)以此来分析PC端的browserInfo。在网上找了些参考资料,以及在github上参考的代码,总结整理如下。

    有一个深深的感触:网上供参考的东西,不一定是全都对的啊,哎,血的教训,折腾了好几个小时,终于弄清楚了问题所在。总结如下: 

    参考博客:


     

    • 浏览器UA信息实时解析页面(可获取用户目前所登录的浏览器信息):http://www.useragentstring.com/index.php
      • 基于不同浏览器的上述解析页面的信息展示:用户代理

    我的实践之环境配置:


     不知道是不是我命途多舛,明明是很顺利的事情,我按照网上的步骤做的时候,总会遇到这样那样的问题。。。下面记录一下:

    我选择了ua-parser的python实现,也就是 /uap-python

    首先根据Github上的Readme文档说明,开始配置环境(血的教训由此开始):

    Readme文档说明如下:

    其实这上面说的倒是很清楚,如果我按照第一个安装方式(pip install ua_parser),倒也不会出现后续的问题。

    由于之前在pip上吃过苦头(自动安装的模块版本和其他模块版本不一致,导致不能正常使用),所以在能自己手动安装的情况下,我就想尽量避免出现以往的问题。于是乎,本宝宝就想自己动手丰衣足食,采取了第二种安装方式,即先把该github 文档下载下来,再用以下命令安装:python setup.py install 。把github上的/uap-python 下载到本地,目录如下:

       

    当我配置好环境之后,开始测试:

    from ua_parser import user_agent_parser

    然后就报错:ImportError: no module named _regexes

    于是乎我就在没有卸载的前提下试了一下第一种配置方案(pip install ua_parser),但是很显然,之前setup.py已经配置过主要的部分(user_agent_parser.py)了,就没能成功配置“次主要”的部分(regexes.py)。

    网上也找了其他的解决方案,也尝试了/python-user-agents(也确实是从这个项目中得到了一些启发,并最终解决了问题):

     

    对user_agents的简要介绍:user_agents is a Python library that provides an easy way to identify/detect devices like mobile phones, tablets and their capabilities by parsing (browser/HTTP) user agent strings.  

    看到这句话:user-agents is hosted on PyPI ,我就去原始的官方文档PyPI 里面去看了看,心想原始发布的应该没什么问题的吧。

    看到官方文档的installation里面只提到了pip的方法,我 就决定把之前装的乱八七糟的全都卸载了,就按照这一句话安装试试看。

    结果怎么着,就成功了。。。哎,宝宝好生气哦。。不过还是要静下心来分析一下问题到底出在哪里。对比了一下我安装失败和安装成功ua_parser 前后的配置文件,发现了问题所在:可以发现,由Github上提供的项目中,没有文件_regexes.py,也就是我的文档报错的主要原因。。。。而直接通过pip安装时,是从官网上下载的whl文件,是包含文件_regexes.py的。所以最终执行成功。

               

    一言以蔽之:

    • 针对这个项目中所提供的安装方案:安装时用pip命令安装,而不要用setup.py安装,原因很简单:Github上提供的文档缺少_regexes.py文件,若直接用setup.py安装会因为缺少文件而导致安装文件不全,进而导致导入文件失败。
    • 针对平时安装过程中出现的错误:如果提供了多种方案,其中一种方案失败的话,就彻底删除,然后再尝试第二种方案。几种方案都不行的话,再去网上寻找解决方案。

    总会成功的!!!

    我的实践之解析UserAgent


    代码展示:

     

    # 解析 UserAgent
    def userAgent_parser():
        pp = pprint.PrettyPrinter(indent=4)
        sql = 'select distinct browserInfo from selected_pc order by uname'
        cursor.execute(sql)
        db.commit()
        browserInfo = cursor.fetchall()
        ua_string = str(browserInfo[0][0])
        #ua_string = ua_string
        print ua_string
        parsed_string = user_agent_parser.Parse(ua_string)
        pp.pprint(parsed_string)
    
    # 连接数据库,测试并查看解析结果
    # connect to databases
    db = MySQLdb.connect("10.60.150.192","zhouwan","940828","thinkdevice")
    cursor = db.cursor()
    userAgent_parser()

    运行结果:

    就是酱紫~

    好啦,大功告成,可以根据这个解析结果来分析browserInfo啦,继续搬砖~

  • 相关阅读:
    Delphi下Treeview控件基于节点编号的访问
    oracle的conn / as sysdba是以sys还是system用户登录呢?
    delphi 字母加数字如何自增??比如0A--0Z,1A--1Z一直到9A--9Z 请赐教
    ORACLE_HOME要怎么配置?
    sqlplus / as sysdba 详解
    oracle 11G数据库实例增加内存
    SQL在字符串中取出最长数字子序列
    delphi 全局变量的定义与初始化赋值
    Delphi公用函数单元
    Dapper的正确使用姿势
  • 原文地址:https://www.cnblogs.com/swje/p/6670391.html
Copyright © 2011-2022 走看看