引言

当我们使用python爬虫爬取数据时,经常会遇到爬取请求拒绝的问题,通过查看请求信息,我们会发现,一般写的爬虫会默认告诉服务器自己发送了一个Python爬取请求,而一般网站是不允许被爬虫访问的,可能是因为会涉及到商业问题。最后,通过更改User-Agent字段就可以轻易骗过该网站。

那么User-Agent到底是什么呢?
User-Agent会告诉网站服务器,访问者是通过什么工具来请求的,如果是爬虫请求,一般会拒绝,如果是用户浏览器,就会应答。

User-Agent字段

1. 基本格式

我们在Chrome内核的浏览器中查看User-Agent的结果如下:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3100.0 Safari/537.36

User-Agent的通常格式如下:

Mozilla/5.0 (平台) 引擎版本 浏览器版本号

2. 第一部分:Mozilla/5.0

历史上各种版本的浏览器互相竞争,当时想获得图文并茂的网页,就必须宣称自己是 Mozilla 浏览器。由此导致如今User-Agent里通常都带有Mozilla字样,出于对历史的尊重,大家都会默认填写该部分。

3. 第二部分:平台

平台这部分可由多个字符串组成,用英文半角分号分开。
Windows系统平台这部分内容如下:

Windows NT 5.0 // 如 Windows 2000
Windows NT 5.1 // 如 Windows XP
Windows NT 6.0 // 如 Windows Vista
Windows NT 6.1 // 如 Windows 7
Windows NT 6.2 // 如 Windows 8
Windows NT 6.3 // 如 Windows 8.1
Windows NT 10.0 // 如 Windows 10
Win64; x64 // Win64 on x64
WOW64 // Win32 on x64

其中,Windows NT 10.0是指我使用的操作系统的版本,比如我使用的win10对应的就是Windows NT 10.0,如果我使用win7对应的就是Windows NT 6.1。Win64; x64是指我的操作系统是64位的。

Linux系统平台这部分内容如下:

X11; Linux i686; // Linux 桌面,i686 版本
X11; Linux x86_64; // Linux 桌面,x86_64 版本
X11; Linux i686 on x86_64 // Linux 桌面,运行在 x86_64 的 i686 版本

macOS系统平台这部分内容如下:

Macintosh; Intel Mac OS X 10_9_0 // Intel x86 或者 x86_64
Macintosh; PPC Mac OS X 10_9_0 // PowerPC
Macintosh; Intel Mac OS X 10.12; // 不用下划线,用点

4. 第三部分:引擎版本

历史上,苹果依靠了WebKit内核开发出Safari浏览器,WebKit包含了WebCore引擎,而WebCore又从KHTML衍生而来。由于历史原因,KHTML引擎需要声明自己是“类似Gecko”的,因此引擎部分通常写为:AppleWebKit/537.36 (KHTML, like Gecko)…Safari/537.36。再后来,Google开发Chrome也是用了WebKit内核,于是也跟着这么写。借用Littern的一句话:“Chrome 希望能得到为Safari编写的网页,于是决定装成Safari,Safari使用了WebKit渲染引擎,而WebKit呢又伪装自己是KHTML,KHTML呢又是伪装成Gecko的。同时所有的浏览器又都宣称自己是Mozilla。”。不过,后来Chrome 28某个版本改用了blink内核,但还是保留了这些字符串。而且,最近的几十个版本中,这部分已经固定,没再变过。

5. 浏览器版本

浏览器版本则是大家通常理解的浏览器版本,本人用的是Chrome浏览器,其中60.0 是大版本,3100是持续增大的一个数字,而0则是修补漏洞的小版本。

HTTP请求头中的User-Agent字段相关推荐

  1. axios请求拦截器在请求头中添加token

    验证用户是否需要登陆,如果需要登陆在请求前在请求头中自动添加token字段. 代码: // request 拦截器 // 可以自请求发送前对请求做一些处理 request.interceptors.r ...

  2. 需要授权的 API ,必须在请求头中使用 Authorization 字段提供 token 令牌

    需要授权的 API ,必须在请求头中使用 添加字段 需要授权的 API ,必须在请求头中使用 Authorization 字段提供 token 令牌 实现方法 通过 axios 请求拦截器添加 tok ...

  3. Http 请求头中的 Proxy-Connection

    平时用 Chrome 开发者工具抓包时,经常会见到 Proxy-Connection 这个请求头.之前一直没去了解什么情况下会产生它,也没去了解它有什么含义.最近看完<HTTP 权威指南> ...

  4. http请求头中的content-type 属性

    在HTTP请求中,我们每天都在使用Content-Type来指定不同格式的请求信息,但是却很少有人去全面了解Content-Type中允许的值有多少,因此这里来了解一下Content-Type的可用值 ...

  5. HTTP 请求头中的 Remote_Addr,X-Forwarded-For,X-Real-IP

    REMOTE_ADDR 表示发出请求的远程主机的 IP 地址,remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当你的浏览器访问某个网站时,假设中间 ...

  6. ajax被token拦截,vue中封装ajax请求,并且拦截请求在请求头中添加token

    /** * 封装请求方法 * @param {Object} url 接口请求地址 * @param {Object} data 接口请求参数(无需请求方式参数,则此项可以为空,否则必须传) * @p ...

  7. axios获取header中的信息_Axios请求头中常见的Content-Type及其使用

    Vue2.0之后,官方不再继续维护vue-resource,尤雨溪大大推荐使用Axios用来替代Ajax. Axios请求头中的Content-Type常见的有3种: 1.Content-Type:a ...

  8. mysqls压力测试怎么用_用 Swagger 测试接口,怎么在请求头中携带 Token?

    松哥周末抽空给 Spring Security 系列也录制了一套视频,目录如下: 感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程 今天的话题来自一个小伙伴在微信上的提问 ...

  9. oauth2 java 获取token_OAuth2 Token 一定要放在请求头中吗?

    Token 一定要放在请求头中吗? 答案肯定是否定的,本文将从源码的角度来分享一下 spring security oauth2 的解析过程,及其扩展点的应用场景. Token 解析过程说明 当我们使 ...

  10. 爬虫-在请求头中添加cookie键值对 访问登陆后可见的页面

    关于cookie >笔记 >理解 cookie相当于病人手里的病历 cookie的格式 请求头中添加cookie键值对 练习-不使用cookie访问个人中心 访问人人网个人中心 结果是得到 ...

最新文章

  1. 深入理解JavaScript系列(10):JavaScript核心(晋级高手必读篇)
  2. php导出excel(xls或xlsx)(解决长数字显示问题)
  3. 过节的快乐,在于Free | 手把手带你学Django
  4. erlang 二进制
  5. Timer TimeTask Handler
  6. 2017寒假第一篇随笔(寒假作业一)
  7. VTK:PolyData之TransformOrderDemo
  8. HDFS分布式文件系统设计原理
  9. android studio dns问题_Android网络优化篇-从DNS开始
  10. 一起瞅一下那些经典案例是如何产业落地的~
  11. apache配置说明
  12. matlab单机无限大系统_单机无穷大系统暂态仿真(完整).docx
  13. 在Hbuilder X中配置夜神模拟器
  14. Windows下Perl环境安装和使用
  15. 基于X86汇编语言的简易打字游戏实现
  16. arcgis标注牵引线_ArcEngine设置有牵引线的标注
  17. 怎么修改和编辑PDF文件中的文字内容
  18. 登录注册页面,JS判断用户手机号码是否已经存在,或者格式不正确
  19. Yocto系列讲解[技巧篇]81 - 如何打patch修复打补丁出错的recipe
  20. 密钥格式标准PKCS,X.509

热门文章

  1. 2018-10-31初级.Net面试题1th
  2. 同步读取文件和异步读取文件的区别
  3. 成都的“大众点评+街旁”
  4. 重庆邮电大学计算机学硕好考吗,重庆邮电大学研究生好考吗
  5. OpenCV-Python教程:模板匹配(matchTemplate)
  6. 切点java_AspectJ之切点语法
  7. gdtool解决在微信中点击棋牌游戏类app下载链接显示已停止访问打不开的问题
  8. 第一章 计算机体系结构(三)— 存储系统之磁盘列阵技术、存储域网络
  9. 包含有简易mvp的音乐播放器
  10. 电脑右键计算机属性在哪里打开,右键属性打不开怎么办