User-Agent,用户代理。用户在上网访问的时候会作为HTTP的包头的一部分向服务器发送,用于识别用户的当前环境,如浏览器及版本号、操作系统等信息。在Chrome中可以在访问网站的时候按下F12查看。
User-Agent也是用户识别的重要部分,通过分析,能知道用户使用的是什么设备、什么浏览器、什么应用等,进而可以分析其购买力、属性、职业等。
比如我在使用的Chrome的User-Agent:
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?
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
package com.asiainfo.zhf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
import eu.bitwalker.useragentutils.UserAgent;
public class ParseUserAgent_UDF extends UDF{
public Text evaluate(final Text userAgent){
StringBuilder builder = new StringBuilder();
UserAgent ua = new UserAgent(userAgent.toString());
builder.append(ua.getOperatingSystem()+"\t"+ua.getBrowser()+"\t"+ua.getBrowserVersion());
return new Text(builder.toString());
}
}
andriod的比较复杂,不过信息量丰富,有些可以看到手机品牌、型号。比如:
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
QQMusic 4050102(android 4.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)
%E8%85%BE%E8%AE%AF%E6%96%B0%E9%97%BB445(android) --》腾讯新闻445(android)
基于观察,发现android的手机型号多数位于ua中的第一个括号中的倒数第二个位置,下面试着将其解析,同样写成hive函数的形式,便于在hive中利用。
public Text evaluate(final Text userAgent){
String str = parse(userAgent.toString());
return new Text(str);
}
public String getFromRegrex(String str,String pattern,int index){
Pattern p = Pattern.compile(pattern);
Matcher matcher = p.matcher(str);
while(matcher.find())
str = matcher.group(index);
return str;
}
public String parse(String userAgent){
String pattern1 = "(.*) AppleWebKit";
String pattern2 = ".* ";
String str = getFromRegrex(userAgent,pattern1,1);
String params[] = str.split(";");
return getFromRegrex(params[params.length-1],pattern2,0).trim();
}
这样经过查询,可以得到某地区某天的上网人数中使用android手机型号数(ip,cookie,型号均不同则算一个设备)的排行榜:
GT-N7100 96002
MI 3 72004
GT-I9500 58310
GT-I9300 48464
MI 2S 38417
SM-N900 31373
SM-N9006 27178
GT-I9508 24072
HM NOTE 1LTETD 22243
SM-N9008 21817
GT-N7108 21516
SM-N9009 19978
MI 3W 19175
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均不同则算一个人):
DPScope 1885255
IHexin 992702
QQ 954482
PPStream_2.5.2 579123
BaiduBoxApp 533368
Taobao4iPhone 401745
BaiduVideo-iPad 280836
DuShuBusHD 259936
CTRIP_WIRELESS 232708
TBClient 223778
IphoneCom 215576
Weibo 174699
BaiduIphoneVideo 169767
BaiduBoxAppDistribution 122065
IPadQQ 67418
weshoothd 62836
AmHexinForPad 58517
TmallClient-iPad 50073
可以看出,除了qq、baidu等使用大众产品之外的人很多外,炒股的人也很多!
[1]http://baike.baidu.com/view/826224.htm
[2]http://tools.yesky.com/19/34456519.shtml 浏览器内核Trident/Gecko/WebKit/Presto