设备指纹识别之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实现,也就是 ua-parser/uap-python

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

Readme文档说明如下:

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

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

网上也找了其他的解决方案,也尝试了selwin/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啦,继续搬砖~

 

posted on 2017-04-05 20:36  苏皖静儿  阅读(2819)  评论(0编辑  收藏  举报

导航