python实现三种随机请求头方式


Posted in Python onJanuary 05, 2021

相信大家在爬虫中都设置过请求头 user-agent 这个参数吧? 在请求的时候,加入这个参数,就可以一定程度的伪装成浏览器,就不会被服务器直接识别为spider.demo.code ,据我了解的,我很多读者每次都是直接从network 中去复制 user-agent 然后把他粘贴到代码中, 这样获取的user-agent 没有错,可以用, 但是如果网站反爬措施强一点,用固定的请求头可能就有点问题, 所以我们就需要设置一个随机请求头,在这里,我分享一下我自己一般用的三种设置随机请求头方式

思路介绍:

其实要达到随机的效果,很大程度上我们可以利用随机函数库random 这个来实现,可以调用random.choice([user-agent]) 随机pick数组中一个就可以了,这是我的一种方式。

python作为一个拥有众多第三方包的语言,自然就有可以生成随机请求头的包咯,没错,就是fake-useragent 这个第三方库了,稍后我们介绍一下这个函数库的简单使用。

既然别人可以写第三方库,自然自己也可以实现一个这样的功能,大部分情况下,我很多代码都是直接调用我自己实现的一个GetUserAgentCS 类,直接就可以获取一个随机请求头了,直接写函数库,才牛逼舒服, 这个我也会在下面介绍如何编写函数库。

自己编写第三方库:

不知道你们写代码的框架是怎样的,面向过程还是面向对象? 对于一次性的代码,就简单的编码就行了,如果你觉得这个代码它可以会在很多的地方用得到,可以重复使用,那么你就可以使用类的方式,去编写这个代码,那么在其他的文件中,你就可以直接调用你的写这个文件,直接调用你写的class类中的各种方法,而我也是这样实现的一个随机请求头的一个第三方库, 如下:

import random
import csv
class GetUserAgentCS(object):
  """
  调用本地请求头文件, 返回请求头
  """

  def __init__(self):
    with open('D://pyth//scrapy 项目//setting//useragent.csv', 'r') as fr:
      fr_csv = csv.reader(fr)
      self.user_agent = [str(i[1]) for i in fr_csv]

  def get_user(self):
    return random.choice(self.user_agent)

useragent文件如下:

1,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36,Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36"
2,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36,Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36"
3,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36,Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"
4,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36,Mozilla/5.0 (X11; CrOS i686 3912.101.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"
5,"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36,Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36"
-------
------- # too much 
100...

代码很简单的,读取本地的csv文件,然后random一个出去就行了,那现在就有人问我,你这个文件怎么来的, 很简单啊,自然就有方法了,待会在下一个模块我会讲到,在这里,我们只需要编写一个GetUserAgentCS类就可以,代码可以直接抄我上面的,然后保存为get_useragent.py 就可以了,然后你把这个包文件放在你自己爬虫文件夹的地方,然后这样调用:

from get_useragent import GetUserAgentCS
headers = {}
ua = GetUserAgentCS().get_user()
headers['user-agent'] = ua
return headers

如果你在这个调用GetUserAgentCS 不成功, 或者底下会出现红色的波浪线, 那么就是你没有设置当前工作环境,你只需要这么设置(设置你的爬虫文件夹):

python实现三种随机请求头方式

你需要点击 Sources Root 就可以了!

使用第三方库 fake-useragent:

这是一个别人已经写好的第三方库,你需要安装然后调用API 就可以了, 它可以获取各种的请求头,唯一的缺点就是 请求不稳定,有的时候网络波动就可能导致获取不成功,用于Scrapy中,不是很舒服,所以我在这个包的基础上,编写了如上我自己的包,至于请求头的数据怎么来的, 就是在这个包运行正常时候,一直更改user-agent,然后不断的请求 http://httpbin.org/user-agent 然后不断的保存数据,写入本地文件就可以了。

我们还是讲一讲这个包的使用方式吧!

安装

pip install fake-useragent

你可以 pip list 查看一下 是否安装成功

使用方式

from fake_useragent import UserAgent
headers= {'User-Agent':str(UserAgent().random)}
r = requests.get(url, headers=headers)
  • UserAgent().random 可以获取任意浏览器的请求头
  • UserAgent().Chrome 可以获取谷歌浏览器的请求头
  • UserAgent().firefox 可以获取火狐浏览器的请求头

这个时候,直接用random就可以了,简单。

读取内存数组:

这个时候就有很多人说, 我就换个请求头而已,需要这么麻烦吗? 当然,自然有简单的方式,只不过每次都需要复制来用,不是很方法,具体如下:

ua = ["Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36,Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.93 Safari/537.36"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36,Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.17 Safari/537.36"
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36,Mozilla/5.0 (X11; NetBSD) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36"]

预先把请求头放入数组里面,然后用就可以了。

import random
ua = [.....]
r = requests.get(url, headers={"user-agent":random.choice(ua)})

以上就是我关于请求头的几种设置方式了,有需要补充的可以评论区留言。

教你用三种方式设置随机请求头, 爬虫设置请求头(user-agent)是必然的,那如何生成一个随机请求头这个也是我们爬虫必须掌握的, 读完本篇文章你就可以轻松掌握 !

到此这篇关于python实现三种随机请求头方式的文章就介绍到这了,更多相关python 随机请求头内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
在Python的Django框架下使用django-tagging的教程
May 30 Python
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
Nov 05 Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
Nov 09 Python
Python和JavaScript间代码转换的4个工具
Feb 22 Python
Python制作豆瓣图片的爬虫
Dec 28 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
详解python中TCP协议中的粘包问题
Mar 22 Python
python经典趣味24点游戏程序设计
Jul 26 Python
python查看数据类型的方法
Oct 12 Python
Python数据持久化存储实现方法分析
Dec 21 Python
python代码实现将列表中重复元素之间的内容全部滤除
May 22 Python
Python图片检索之以图搜图
May 31 Python
scrapy实践之翻页爬取的实现
Jan 05 #Python
python里glob模块知识点总结
Jan 05 #Python
python用opencv 图像傅里叶变换
Jan 04 #Python
python基于opencv 实现图像时钟
Jan 04 #Python
python基于opencv实现人脸识别
Jan 04 #Python
利用python绘制正态分布曲线
Jan 04 #Python
Python 打印自己设计的字体的实例讲解
Jan 04 #Python
You might like
php4的彩蛋
2006/10/09 PHP
php基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
php 字符串替换的方法
2012/01/10 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
javascript 一个自定义长度的文本自动换行的函数
2007/08/19 Javascript
js AspxButton的客户端操作
2009/06/26 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
关于JS管理作用域的问题
2013/04/10 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
基于HTML模板和JSON数据的JavaScript交互(移动端)
2016/04/06 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
AngularJS 简单应用实例
2016/07/28 Javascript
jquery插件bootstrapValidator数据验证详解
2016/11/09 Javascript
JS获取浮动(float)元素的style.left值为空的快速解决办法
2017/02/19 Javascript
vue 怎么创建组件及组件使用方法
2017/07/27 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
JavaScript修改注册表实例代码
2020/01/05 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
NodeJS配置CORS实现过程详解
2020/12/02 NodeJs
Vue中computed和watch有哪些区别
2020/12/19 Vue.js
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
Python中内建函数的简单用法说明
2016/05/05 Python
Python文件读写常见用法总结
2019/02/22 Python
python实现将文件夹内的每张图片批量分割成多张
2019/07/22 Python
python os.fork() 循环输出方法
2019/08/08 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
PyCharm MySQL可视化Database配置过程图解
2020/06/09 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
浅析Python 条件控制语句
2020/07/15 Python
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
医学检验专业个人求职信范文
2013/12/04 职场文书
十佳护士先进事迹
2014/05/08 职场文书
团结友爱主题班会
2015/08/13 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL