2016-11-27 47 views
0

我想解析用戶代理字符串,並理想地將它們提取到Python字典中。在瀏覽網頁之後,似乎要做到這一點的唯一方法是從頭開始編寫正則表達式解析器。據我所知,到目前爲止最好的解決方案是https://github.com/ua-parser的貢獻者所做的。用戶代理字符串的解析器?

現在,考慮下面的用戶代理(UA)字符串:

Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko

當我給它通過上述UA-解析器(在Python),我得到以下詞典:

{ 'device': {'brand': None, 'family': 'Other', 'model': None}, 
    'os': { 'family': 'Windows 7', 
       'major': None, 
       'minor': None, 
       'patch': None, 
       'patch_minor': None}, 
    'string': 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko', 
    'user_agent': {'family': 'IE', 'major': '11', 'minor': '0', 'patch': None}} 

因此,這裏是我的問題:爲什麼返回user_agent場說,其家族是IE 11的時候很明顯,是在原有的UA字符串,即沒有參考?第一個關鍵字Mozilla/5.0發生了什麼?爲什麼Windows NT 6.1被視爲Windows 7家族?在我看來,輸出字典與輸入的UA字符串沒什麼關係。嘗試下面的在線分析器餵養UA字符串,看看自己:

https://udger.com/resources/online-parser?Fuas=Mozilla%2F5.0+%28Windows+NT+6.1%3B+Trident%2F7.0%3B+rv%3A11.0%29+like+Gecko%0D%0A&Fip=&test=&action=analyze

我瘋了或者是這些解析器完全沒譜?

備註:用戶代理字符串遵循由HTTP標準https://tools.ietf.org/html/rfc7231#section-5.5.3指定的明確定義的格式。因此,你會認爲它們解析是一個簡單的事情,但它似乎不是如此......

+0

'Trident'是'IE'引擎。 'Windows 7'總是發送'Windows NT 6.1'。問比爾蓋茨他爲什麼決定在他的代碼中使用名稱「Windows NT 6.1」。 – furas

+0

順便說一句:'Windows 8'使用'Windows NT 6.2','Windows 8.1'使用'Windows NT 6.3','Windows 2000'使用'Windows NT 5.0'和'Window NT'使用'Windows NT 4.0' :) – furas

+0

因爲瀏覽器識別字符串的解釋不是一個編程問題,所以我們投票結束這個問題。此外,這個問題似乎在抱怨外部庫的功能成爲主要問題。這應該在項目網站上討論,而不是在SO上。 –

回答

0

我們分手吧每個參數的理解:

的Mozilla/5.0 - 就是一般的令牌即瀏覽器與Mozilla兼容,並且幾乎每個瀏覽器都很常見。

Windows NT 6.1 - 瀏覽器的平臺。 Windows NT是基於Windows操作系統的內核。每個版本都是Windows的不同版本(請參閱here)。

Trident/7.0 - IE是否使用佈局引擎。它分成Engine_Name /版本

rv:11.0 - 瀏覽器版本。這裏表示IE11。

像壁虎 - 爲了讓網站識別瀏覽器的正確CSS規則,他們在User-Agent中搜索某個字符串。通過添加like Gecko網站知道IE能夠處理Gecko模板化的CSS規則。 您可以在MSDN上閱讀關於IE用戶代理的更多信息。