設備指紋識別之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啦,繼續搬磚~

 


免責聲明!

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



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