Python爬虫小技巧之伪造随机的User-Agent


Posted in Python onSeptember 13, 2018

前言

不管是做开发还是做过网站的朋友们,应该对于User Agent一点都不陌生,User Agent 中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等

在Python爬虫的过程中经常要模拟UserAgent, 因此自动生成UserAgent十分有用

通过UA来判断不同的设备或者浏览器是开发者最常用的方式方法,这个也是对于Python反爬的一种策略,但是有盾就有矛啊

写好爬虫的原则只有一条:

就是让你的抓取行为和用户访问网站的真实行为尽量一致

1、伪造UA字符串,每次请求都使用随机生成的UA

为了减少复杂度,随机生成UA的功能通过第三方模块库fake-useragent实现,使用pip进行安装

pip install fake-useragent

2、生成一个UA字符串只需要如下代码

from fake_useragent import UserAgent
 ua = UserAgent()

各浏览器的User-Agent

这个库还有一个其他的功能,就是可以随机各浏览器的UA

IE浏览器的UA:

print(ua.ie)

Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)

Opera浏览器的UA:

print(ua.opera)

Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.6.37 Version/11.00

Chrome浏览器的UA:

print(ua.chrome)

Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.2 (KHTML, like Gecko) Chrome/22.0.1216.0 Safari/537.2

Firefox浏览器的UA:

print(ua.firefox)

Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1

Safari浏览器的UA:

print(ua.safari)

Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A5355d Safari/8536.25

随机User-Agent

写爬虫最实用的就是可以随意变换headers,一定要有随机性

在这里我写了三个随机生成UA,三次打印都不一样,随机性很强,十分方便

print(ua.random)
print(ua.random)
print(ua.random)

Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, likeGecko) Chrome/37.0.2062.124 Safari/537.36

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1664.3 Safari/537.36

当然,你如果不想这么用的话,你也可以自己搜集一些UA,存为文本文件,然后打开读取来用

附:常用的User-Agent列表

USER_AGENTS = [
 "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
 "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)",
 "Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)",
 "Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)",
 "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
 "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
 "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
 "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
 "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
 "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
 "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
 "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5",
 "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6",
 "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11",
 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20",
 "Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52",
]

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

原文链接:https://qq52o.me/2281.html

Python 相关文章推荐
python通过字典dict判断指定键值是否存在的方法
Mar 21 Python
python实现根据用户输入从电影网站获取影片信息的方法
Apr 07 Python
Python实现SVN的目录周期性备份实例
Jul 17 Python
机器学习python实战之手写数字识别
Nov 01 Python
用python实现将数组元素按从小到大的顺序排列方法
Jul 02 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
Jul 26 Python
在Python中居然可以定义两个同名通参数的函数
Jan 31 Python
Django权限设置及验证方式
May 13 Python
什么是python的列表推导式
May 26 Python
基于Django集成CAS实现流程详解
Nov 28 Python
pytorch 运行一段时间后出现GPU OOM的问题
Jun 02 Python
Python自动化实战之接口请求的实现
May 30 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 #Python
Python爬虫常用小技巧之设置代理IP
Sep 13 #Python
python集合比较(交集,并集,差集)方法详解
Sep 13 #Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 #Python
Python字典创建 遍历 添加等实用基础操作技巧
Sep 13 #Python
python单例模式获取IP代理的方法详解
Sep 13 #Python
如何利用python制作时间戳转换工具详解
Sep 12 #Python
You might like
一个高ai的分页函数和一个url函数
2006/10/09 PHP
ADODB结合SMARTY使用~超级强
2006/11/25 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
使用正则替换变量
2007/05/05 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
jQuery 插件仿百度搜索框智能提示(带Value值)
2013/01/22 Javascript
构造函数+原型模式构造js自定义对象(最通用)
2014/05/12 Javascript
jQuery内置的AJAX功能和JSON的使用实例
2014/07/27 Javascript
不依赖Flash和任何JS库实现文本复制与剪切附源码下载
2015/10/09 Javascript
jq实现左滑显示删除按钮,点击删除实现删除数据功能(推荐)
2016/08/23 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
详解js中==与===的区别
2017/01/08 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
Vue 子组件与数据传递问题及注意事项
2019/07/11 Javascript
基于Taro的微信小程序模板消息-获取formId功能模块封装实践
2019/07/15 Javascript
[30:00]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第二场 11.28
2020/12/01 DOTA
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
python+flask实现API的方法
2018/11/21 Python
基于Python函数和变量名解析
2019/07/19 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
Under Armour美国官网:美国知名高端功能性运动品牌
2016/09/05 全球购物
军校本科大学生自我评价
2014/01/14 职场文书
军训自我鉴定200字
2014/02/13 职场文书
寄语是什么意思
2014/04/10 职场文书
特教教师先进事迹
2014/05/21 职场文书
房地产端午节活动方案
2014/08/24 职场文书
与美同行演讲稿
2014/09/13 职场文书
一次性工伤赔偿协议书范本
2014/11/25 职场文书
入队仪式主持词
2015/07/04 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
Vue3.0写自定义指令的简单步骤记录
2021/06/27 Vue.js
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android