我想解析用戶代理字符串,並理想地將它們提取到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字符串,看看自己:
我瘋了或者是這些解析器完全沒譜?
備註:用戶代理字符串遵循由HTTP標準https://tools.ietf.org/html/rfc7231#section-5.5.3指定的明確定義的格式。因此,你會認爲它們解析是一個簡單的事情,但它似乎不是如此......
'Trident'是'IE'引擎。 'Windows 7'總是發送'Windows NT 6.1'。問比爾蓋茨他爲什麼決定在他的代碼中使用名稱「Windows NT 6.1」。 – furas
順便說一句:'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
因爲瀏覽器識別字符串的解釋不是一個編程問題,所以我們投票結束這個問題。此外,這個問題似乎在抱怨外部庫的功能成爲主要問題。這應該在項目網站上討論,而不是在SO上。 –