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中关键字is与==的区别简述
Jul 31 Python
在Python中执行系统命令的方法示例详解
Sep 14 Python
Python内置函数—vars的具体使用方法
Dec 04 Python
解决Python3 抓取微信账单信息问题
Jul 19 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
python中的反斜杠问题深入讲解
Aug 12 Python
Python: 传递列表副本方式
Dec 19 Python
Python调用Windows API函数编写录音机和音乐播放器功能
Jan 05 Python
Python批量安装卸载1000个apk的方法
Apr 10 Python
Python selenium实现断言3种方法解析
Sep 08 Python
Django集成MongoDB实现过程解析
Dec 01 Python
基于PyQT5制作一个桌面摸鱼工具
Feb 15 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
如何对PHP程序中的常见漏洞进行攻击(上)
2006/10/09 PHP
建立文件交换功能的脚本(一)
2006/10/09 PHP
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
PHP回溯法解决0-1背包问题实例分析
2015/03/23 PHP
php数组合并与拆分实例分析
2015/06/12 PHP
php将服务端的文件读出来显示在web页面实例
2016/10/31 PHP
在Javascript中定义对象类别
2006/12/22 Javascript
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
Javascript实现返回上一页面并刷新的小例子
2013/12/11 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
关于验证码在IE中不刷新的快速解决方法
2016/09/23 Javascript
如何处理JSON中的特殊字符
2016/11/30 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
webpack独立打包和缓存处理详解
2017/04/03 Javascript
浅谈箭头函数写法在ReactJs中的使用
2017/08/22 Javascript
慕课网题目之js实现抽奖系统功能
2017/09/19 Javascript
JavaScript函数绑定用法实例分析
2017/11/14 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python中logging模块的一些简单用法的使用
2019/02/22 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
Arti-shopping中文官网:大型海外商品一站式直邮平台
2020/03/23 全球购物
网吧消防安全责任书
2014/07/29 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
初一年级组工作总结
2015/08/12 职场文书
个人向公司借款协议书
2016/03/19 职场文书
导游词之山海关
2019/12/10 职场文书
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL