Парсер User-Agent
Разбирайте строки User-Agent для извлечения браузера, ОС, типа устройства и движка.
Часто задаваемые вопросы
Реализация кода
import re
UA_PATTERNS = {
"browser": [
(r"Edge/([d.]+)", "Edge"),
(r"OPR/([d.]+)", "Opera"),
(r"Chrome/([d.]+)", "Chrome"),
(r"Firefox/([d.]+)", "Firefox"),
(r"Safari/([d.]+).*Version/([d.]+)", "Safari"),
(r"MSIE ([d.]+)", "IE"),
(r"Trident/.*rv:([d.]+)", "IE"),
],
"os": [
(r"Windows NT ([d.]+)", "Windows"),
(r"Mac OS X ([d._]+)", "macOS"),
(r"Android ([d.]+)", "Android"),
(r"iPhone OS ([d_]+)", "iOS"),
(r"Linux", "Linux"),
],
"device": [
(r"Mobile", "Mobile"),
(r"Tablet", "Tablet"),
(r"iPad", "Tablet"),
(r"iPhone", "Mobile"),
],
}
def parse_ua(ua: str) -> dict:
result = {"browser": "Unknown", "os": "Unknown", "device": "Desktop", "raw": ua}
for pattern, name in UA_PATTERNS["browser"]:
m = re.search(pattern, ua)
if m:
result["browser"] = f"{name} {m.group(1)}"
break
for pattern, name in UA_PATTERNS["os"]:
m = re.search(pattern, ua)
if m:
version = m.group(1).replace("_", ".") if m.lastindex else ""
result["os"] = f"{name} {version}".strip()
break
for pattern, device_type in UA_PATTERNS["device"]:
if re.search(pattern, ua, re.IGNORECASE):
result["device"] = device_type
break
return result
test_uas = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 Mobile/15E148 Safari/604.1",
"Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)",
]
for ua in test_uas:
info = parse_ua(ua)
print(f"Browser: {info['browser']}, OS: {info['os']}, Device: {info['device']}")Comments & Feedback
Comments are powered by Giscus. Sign in with GitHub to leave a comment.