2014-03-13 2 views
9

parse 사용자 에이전트 문자열에 대한 최선의 방법은 여기 django request?django에서 HTTP_USER_AGENT 문자열을 구문 분석하십시오.

request.META.get('HTTP_USER_AGENT', '') 

에서 무엇 내가 문자열에 무엇을 얻을 수 있습니다.

Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36

이 정보를 분석하는 방법을 확실하지.

비용 (시간, + 메모리) 효율적인 솔루션이 있습니까? 문자열을 모두 파싱해야합니다.

+0

설명하십시오, 당신이 필요로하는 이유는 무엇 정보를 제공합니다. – tjati

+0

미들웨어를 추적하는 사용자가 있으며 HTTP_USER_AGENT 정보를 DB에 저장합니다. 내 사용자가 대부분의 시간 동안 어떤 종류의 브라우저를 사용하는지 알고 싶습니다. 그 'HTTP_USER_AGENT' 문자열을 구문 분석해야합니다. – Clayton

답변

21

이 라이브러리를 시도 할 수 있습니다 :

https://pypi.python.org/pypi/user-agents/ 

을 :

from user_agents import parse 

# iPhone's user agent string 
ua_string = 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B179 Safari/7534.48.3' 
user_agent = parse(ua_string) 

# Accessing user agent's browser attributes 
user_agent.browser # returns Browser(family=u'Mobile Safari', version=(5, 1), version_string='5.1') 
user_agent.browser.family # returns 'Mobile Safari' 
user_agent.browser.version # returns (5, 1) 
user_agent.browser.version_string # returns '5.1' 

# Accessing user agent's operating system properties 
user_agent.os # returns OperatingSystem(family=u'iOS', version=(5, 1), version_string='5.1') 
user_agent.os.family # returns 'iOS' 
user_agent.os.version # returns (5, 1) 
user_agent.os.version_string # returns '5.1' 

# Accessing user agent's device properties 
user_agent.device # returns Device(family='iPhone') 
user_agent.device.family # returns 'iPhone' 
+0

이것은 미들웨어 종류의 물건입니다. 그래서 얼마나 효율적인지 궁금해하고 있었습니까? 매번 새로운 요청으로 실행됩니다. – Clayton

+0

미리 정의 된 세부 사항을 원하면'regex'를 사용하여 자신의 파서를 작성할 수 있습니다. 효율적으로 만들려면 세션에 저장할 수 있습니다. 만료 될 때까지 세션에서 다시 시도 할 것입니다. 그래서 세션에서 발견되면 다시 구문 분석 할 필요가 없습니다. –

+0

그게 무슨 뜻이야, 당신은'HTTP_USER_AGENT' 문자열을 볼 수 있습니까? 'Mozilla/5.0 (Windows NT 6.1, WOW64) AppleWebKit/537.36 (Gecko와 같은 KHTML) Chrome/33.0.1750.146 Safari/537.36' 나는 크롬에서 요청했고, 모든 종류의 정보와 어떤 기법을 사용하는지 이 파싱? – Clayton