User-Agent分析及其价值简析


查看电脑流泪拿起的userAgent:http://tools.jb51.net/table/useragent  



原文:http://blog.csdn.net/laozhaokun/article/details/42024663 



User-Agent,用户代理。用户在上网访问的时候会作为HTTP的包头的一部分向服务器发送,用于识别用户的当前环境,如浏览器及版本号、操作系统等信息。在Chrome中可以在访问网站的时候按下F12查看。

User-Agent也是用户识别的重要部分,通过分析,能知道用户使用的是什么设备、什么浏览器、什么应用等,进而可以分析其购买力、属性、职业等。

比如我在使用的Chrome的User-Agent:

[java]  view plain  copy
 
  1. Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.125 Safari/537.36  

Mozilla/5.0 :以前用于Netscape浏览器,目前大多数浏览器UA都会带有。

Windows NT 6.1:代表windows7系统。

WOW64:Windows-on-Windows 64-bit,32位的应用程序运行于此64位处理器上。[1]

AppleWebKit/537.36:浏览器内核[2]。

KHTML:一个HTML排版引擎。

like Gecko:这不是Geckeo 浏览器,但是运行起来像Geckeo浏览器。

Chrome/36.0.1985.125:Chrome版本号。

Safari/537.36:宣称自己是Safari?

判断PC浏览器品牌:
可先判断系统平台,再来判断浏览器。
IE:带有MSIE可认为是IE浏览器。
User-Agent:Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0)
User-Agent:Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)

Safari:仅出现Safari字样。

User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; en-us) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50

Firefox:仅出现Firefox字样。
Firefox 4.0.1 – Windows User-Agent:Mozilla/5.0 (Windows NT 6.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
Opera:出现Opera字样。
User-Agent:Opera/9.80 (Windows NT 6.1; U; en) Presto/2.8.131 Version/11.11
Chrome:仅出现Chrome、Safari字样。
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11
Maxthon:出现Maxthon。
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)
TencentTraveler:
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; TencentTraveler 4.0)
世界之窗:
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; The World)
360:360SE
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; 360SE)
搜狗:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 SE 2.X MetaSr 1.0
Avant:
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Avant Browser)


简单的解析可以使用开源的包,下面是一个简单的UA解析函数,用于Hive中作为自定义函数。更复杂的需要自己写规则。

[java]  view plain  copy
 
  1. package com.asiainfo.zhf;  
  2.   
  3. import org.apache.hadoop.hive.ql.exec.UDF;  
  4. import org.apache.hadoop.io.Text;  
  5.   
  6. import eu.bitwalker.useragentutils.UserAgent;  
  7.   
  8. public class ParseUserAgent_UDF extends UDF{  
  9.     public Text evaluate(final Text userAgent){  
  10.         StringBuilder builder = new StringBuilder();  
  11.         UserAgent ua = new UserAgent(userAgent.toString());  
  12.         builder.append(ua.getOperatingSystem()+"\t"+ua.getBrowser()+"\t"+ua.getBrowserVersion());  
  13.         return new Text(builder.toString());  
  14.     }  
  15. }  


移动端的话,一般各种应用都能像浏览器一样访问web页面,其也有自己的UA.

andriod的比较复杂,不过信息量丰富,有些可以看到手机品牌、型号。比如:

[java]  view plain  copy
 
  1. Mozilla/5.0 (Linux; Android 4.4.2; HUAWEI P6 S-U06 Build/HuaweiP6S-U06) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 AliApp(TB/5.1.3) WindVane/5.6.6 TBANDROID/227200@taobao_android_5.1.3 720X1184  
  2. QQMusic 4050102(android 4.3)  
  3. Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; HUAWEI C8813Q Build/HuaweiC8813Q) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Weibo (HUAWEI-HUAWEI C8813Q__weibo__4.3.5__android__android4.1.2)  
  4. %E8%85%BE%E8%AE%AF%E6%96%B0%E9%97%BB445(android) --》腾讯新闻445(android)  
基于观察,发现android的手机型号多数位于ua中的第一个括号中的倒数第二个位置,下面试着将其解析,同样写成hive函数的形式,便于在hive中利用。

[java]  view plain  copy
 
  1. public Text evaluate(final Text userAgent){  
  2.     String str = parse(userAgent.toString());  
  3.     return new Text(str);  
  4. }  
  5. public String getFromRegrex(String str,String pattern,int index){  
  6.     Pattern p = Pattern.compile(pattern);  
  7.     Matcher matcher = p.matcher(str);  
  8.     while(matcher.find())  
  9.         str = matcher.group(index);  
  10.     return str;  
  11. }  
  12. public String parse(String userAgent){  
  13.     String pattern1 = "(.*) AppleWebKit";  
  14.     String pattern2 = ".* ";  
  15.     String str = getFromRegrex(userAgent,pattern1,1);  
  16.     String params[] = str.split(";");  
  17.     return getFromRegrex(params[params.length-1],pattern2,0).trim();  
  18. }  
这样经过查询,可以得到某地区某天的上网人数中使用android手机型号数(ip,cookie,型号均不同则算一个设备)的排行榜:

[java]  view plain  copy
 
  1. GT-N7100        96002  
  2. MI 3    72004  
  3. GT-I9500        58310  
  4. GT-I9300        48464  
  5. MI 2S   38417  
  6. SM-N900 31373  
  7. SM-N9006        27178  
  8. GT-I9508        24072  
  9. HM NOTE 1LTETD  22243  
  10. SM-N9008        21817  
  11. GT-N7108        21516  
  12. SM-N9009        19978  
  13. MI 3W   19175  
  14. MI 2    18545  

可以看出,三星和小米占大头,如果将‘-’等分隔符去掉,只看厂商,则更加清楚地能看到每个厂商的设备在市场上的占有数。

iOS App默认的UA格式:App名/版本号 CFNetwork/版本号 Darwin/版本号".

%E7%BE%8E%E9%A2%9C%E7%9B%B8%E6%9C%BA/3.0.1 CFNetwork/672.1.15 Darwin/14.0.0 --》美颜相机/3.0.1 CFNetwork/672.1.15 Darwin/14.0.0

基于如上规则,可以查出ios应用的使用排行,下面ios App是在某地区某天的使用人数(cookie、ip均不同则算一个人):

[java]  view plain  copy
 
  1. DPScope 1885255  
  2. IHexin  992702  
  3. QQ  954482  
  4. PPStream_2.5.2  579123  
  5. BaiduBoxApp 533368  
  6. Taobao4iPhone   401745  
  7. BaiduVideo-iPad 280836  
  8. DuShuBusHD  259936  
  9. CTRIP_WIRELESS  232708  
  10. TBClient    223778  
  11. IphoneCom   215576  
  12. Weibo   174699  
  13. BaiduIphoneVideo    169767  
  14. BaiduBoxAppDistribution 122065  
  15. IPadQQ  67418  
  16. weshoothd   62836  
  17. AmHexinForPad   58517  
  18. TmallClient-iPad    50073  
可以看出,除了qq、baidu等使用大众产品之外的人很多外,炒股的人也很多!


你可能感兴趣的:(Java)