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下函数参数的传递(参数带星号的说明)
Sep 19 Python
python删除过期文件的方法
May 29 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
详解如何在Apache中运行Python WSGI应用
Jan 02 Python
python实现淘宝秒杀脚本
Jun 23 Python
浅析Python 引号、注释、字符串
Jul 25 Python
使用python编写一个语音朗读闹钟功能的示例代码
Jul 14 Python
Python实现GIF图倒放
Jul 16 Python
python中判断文件结束符的具体方法
Aug 04 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
Python利用myqr库创建自己的二维码
Nov 24 Python
python Pexpect模块的使用
Dec 25 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
77A一级收信机修理记
2021/03/02 无线电
PHP URL参数获取方式的四种例子
2014/02/28 PHP
php实现批量修改文件名称的方法
2016/07/23 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
YII框架模块化处理操作示例
2019/04/26 PHP
浅谈laravel中的关联查询with的问题
2019/10/10 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
javascript getElementsByClassName实现代码
2010/10/11 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
jQuery使用$.ajax提交表单完整实例
2015/12/11 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
高效利用Angular中内置服务$http、$location等
2016/03/22 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
JS中append字符串包含onclick无效传递参数失败的解决方案
2016/12/26 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
jquery 校验中国身份证号码实例详解
2017/04/11 jQuery
Vuex简单入门
2017/04/19 Javascript
jQuery中的$是什么意思及 $. 和 $().的区别
2018/04/20 jQuery
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
详解基于webpack&gettext的前端多语言方案
2019/01/29 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
基于Vue+Webpack拆分路由文件实现管理
2020/11/16 Javascript
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
对python dataframe逻辑取值的方法详解
2019/01/30 Python
详解Python中is和==的区别
2019/03/21 Python
马来西亚在线购物:POPLOOK.com
2019/12/09 全球购物
文艺晚会策划方案
2014/06/11 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
MySQL常见优化方案汇总
2022/01/18 MySQL