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?
判断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手机型号数(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

User-Agent分析及其价值简析相关推荐

  1. 网路游侠:网络协议分析类产品简析

    目前网络协议分析类产品火爆的很,游侠(www.youxia.org)其实在几年前就在关注这个市场,目前应该说已经做的如火如荼,但是貌似依然有很多人对这类产品认识有偏差,简单说几句: 网络协议分析类产品 ...

  2. 小白科研笔记:简析SOTA目标检测算法3D-CVF

    1. 前言 最近KITTI的3D目标检测榜刷出了一个新的Top One双阶段算法3D-CVF.做算法,有时间需要跟紧新的网络架构.所以这篇博客主要分析这篇论文3D-CVF: Generating Jo ...

  3. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

  4. uboot源码分析(1)uboot 命令解析流程简析

    uboot 命令解析流程简析 uboot正常启动后,会调用main_loop(void)函数,进入main_loop()之后,如果在规定的时间(CONFIG_BOOTDELAY)内,没有检查到任何按键 ...

  5. android中so文件格式详解,[原创]一 Android ELF系列:ELF文件格式简析到linker的链接so文件原理分析...

    Android ELF系列:ELF文件格式简析和linker的链接so文件原理分析 Android ELF系列:实现一个so文件加载器 Android ELF系列:手写一个so文件(包含两个导出函数) ...

  6. 【Android源码分析】Android系统关键服务启动简析

    一.关于Android系统重要的进程 (1).init进程:init进程是Linux内核启动完成之后,启动的第一个用户进程,Android系统就是在这个进程的基础上启动起来的,进程pid为1.init ...

  7. 精益质量管理简析(转载)

    精益质量管理简析(转载) 精益质量管理简析 http://www.quality-world.cn/guanli/2741.html 精益质量管理就是在对关键质量数据的定量化分析基础上,综合运用多种知 ...

  8. 卡尔卡西25首练习曲简析-音阶与音程训练

    卡尔卡西于1792年出生于意大利佛罗伦萨,中年定居巴黎而于1853年去世,其吉他活动活跃于整个欧洲.他是吉他史上第一黄金期(也就是吉他的复古与古典时期)的重要人物之一,与朱里亚尼和卡路里并称为意大利三 ...

  9. 【路径规划】A*算法方法改进思路简析

    A*算法方法改进思路简析 0. 前言 1. A*算法的总体流程 2. A*算法的改进 2.1 启发函数的选择与优化 2.1.1 预估函数的选择 2.1.2 为启发函数增加权重系数 2.1.3 节点比较 ...

最新文章

  1. yii2框架随笔29
  2. python实现文件下载的方法总结
  3. 开发VUE使用第三库,发现有bug怎么办?
  4. mysql的varchar与text对比
  5. js 微信小程序 转换string_微信小程序--js中string转换为number
  6. 易实战Spring Boot 2 资源汇总 从入门到精通 内含实战github代码 毫无保留分享
  7. .NET开源项目介绍及资源推荐:单元测试
  8. linux管理进程的数据结构,Linux 进程运行的各项指标的监测和一些管理命令的应用...
  9. C#反编译工具ilspy下载地址
  10. IDEA使用教程之创建一个工程(一)
  11. Markdown学习
  12. 英文构词法 —— circum- 前缀
  13. UNR2 黎明前的巧克力
  14. 【项目实战】Python基于OpenCV和卷积神经网络CNN进行车牌号码识别项目实战
  15. C++基础入门(从了解C++到Hello World)
  16. 【fairy】实验吧——看起来有点难
  17. Farey sequences
  18. 中英文说明书丨 AbFluor 488 细胞凋亡检测试剂盒
  19. 解决Edge中插件下载失败的问题
  20. 「 LaTex 」写论文,插入序号(分论点)方法

热门文章

  1. 【Kconfig】linux-Kconfig相关配置及分析指南
  2. 开源 java 电商系统
  3. 3D空间中的点坐标转化为屏幕二维点坐标(二)
  4. 跟我学,你的服务器够安全吗?第四篇----tomcat安全篇
  5. chrome浏览器在同一网站同时登陆多账号
  6. 基于UDQ的并网单相逆变器控制【同步参考系下单相并网全桥正弦PWM逆变器闭环控制】(Simulink)
  7. hdu(4339)树状数组+二分查找
  8. CQRS实践(1): 什么是CQRS
  9. 1000部电影艺术的刺杀和横行-1柴系媛
  10. 【JQ】jQuery改变css伪元素样式