首页 > 代码库 > User-Agent分析及其价值简析

User-Agent分析及其价值简析

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

比如我在使用的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?

判断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中作为自定义函数。更复杂的需要自己写规则。

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());
	}
}


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

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手机型号数的排行榜:

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


User-Agent分析及其价值简析