python爬虫 urllib模块反爬虫机制UA详解


Posted in Python onAugust 20, 2019

方法: 使用urlencode函数

urllib.request.urlopen()

import urllib.request
import urllib.parse
url = 'https://www.sogou.com/web?'
#将get请求中url携带的参数封装至字典中
param = {
  'query':'周杰伦'
}
#对url中的非ascii进行编码
param = urllib.parse.urlencode(param)
#将编码后的数据值拼接回url中
url += param 
response = urllib.request.urlopen(url=url)
data = response.read()
with open('./周杰伦1.html','wb') as fp:
  fp.write(data)
print('写入文件完毕')

开发者工具浏览器按F12或者右键按检查 ,有个抓包工具network,刷新页面,可以看到网页资源,可以看到请求头信息,UA

在抓包工具点击任意请求,可以看到所有请求信息,向应信息,

主要用到headers,response,response headers存放响应头信息,request headers 存放请求信息

python爬虫 urllib模块反爬虫机制UA详解

python爬虫 urllib模块反爬虫机制UA详解

反爬出机制:网站会检查请求的UA,如果发现UA是爬虫程序,会拒绝提供网站页面数据。

如果网站检查发现请求UA是基于某一款浏览器标识(浏览器发起的请求),网站会认为请求是正常请求,会把页面数据响应信息给客户端

User-Agent(UA):请求载体的身份标识

反反爬虫机制:

伪造爬虫程序的请求的UA,把爬虫程序的请求UA伪造成谷歌标识,火狐标识

通过自定义请求对象,用于伪装爬虫程序请求的身份。

User-Agent参数,简称为UA,该参数的作用是用于表明本次请求载体的身份标识。如果我们通过浏览器发起的请求,则该请求的载体为当前浏览器,则UA参数的值表明的是当前浏览器的身份标识表示的一串数据。

如果我们使用爬虫程序发起的一个请求,则该请求的载体为爬虫程序,那么该请求的UA为爬虫程序的身份标识表示的一串数据。

有些网站会通过辨别请求的UA来判别该请求的载体是否为爬虫程序,如果为爬虫程序,则不会给该请求返回响应,那么我们的爬虫程序则也无法通过请求爬取到该网站中的数据值,这也是反爬虫的一种初级技术手段。那么为了防止该问题的出现,则我们可以给爬虫程序的UA进行伪装,伪装成某款浏览器的身份标识。

上述案例中,我们是通过request模块中的urlopen发起的请求,该请求对象为urllib中内置的默认请求对象,我们无法对其进行UA进行更改操作。urllib还为我们提供了一种自定义请求对象的方式,我们可以通过自定义请求对象的方式,给该请求对象中的UA进行伪装(更改)操作。

自定义请求头信息字典可以添加谷歌浏览器的UA标识,自定义请求对象来伪装成谷歌UA

1.封装自定义的请求头信息的字典,

2.注意:在headers字典中可以封装任意的请求头信息

3.将浏览器的UA数据获取,封装到一个字典中。该UA值可以通过抓包工具或者浏览器自带的开发者工具中获取某请求,
从中获取UA的值

import urllib.request
import urllib.parse
url = 'https://www.sogou.com/web?query='
# url的特性:url不可以存在非ASCII编码字符数据
word = urllib.parse.quote("周杰伦")
# 将编码后的数据值拼接回url中
url = url+word # 有效url
# 发请求之前对请求的UA进行伪造,伪造完再对请求url发起请求
# UA伪造
# 1 子制定一个请求对象,headers是请求头信息,字典形式
# 封装自定义的请求头信息的字典,
# 注意:在headers字典中可以封装任意的请求头信息
headers = {
  # 存储任意的请求头信息
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
# 该请求对象的UA进行了成功的伪装
request = urllib.request.Request(url=url, headers=headers)
# 2.针对自定义请求对象发起请求
response = urllib.request.urlopen(request)
# 3.获取响应对象中的页面数据:read函数可以获取响应对象中存储的页面数据(byte类型的数据值)
page_text = response.read()
# 4.持久化存储:将爬取的页面数据写入文件进行保存
with open("周杰伦.html","wb") as f:
  f.write(page_text)
print("写入数据成功")

这样就可以突破网站的反爬机制

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
在Python中操作文件之truncate()方法的使用教程
May 25 Python
Python入门学习之字符串与比较运算符
Oct 12 Python
Python简单实现enum功能的方法
Apr 25 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
深入理解Python中的*重复运算符
Oct 28 Python
python生成二维码的实例详解
Oct 29 Python
Python + OpenCV 实现LBP特征提取的示例代码
Jul 11 Python
Python中的延迟绑定原理详解
Oct 11 Python
python GUI库图形界面开发之PyQt5开发环境配置与基础使用
Feb 25 Python
python seaborn heatmap可视化相关性矩阵实例
Jun 03 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 Python
Pytorch 抽取vgg各层并进行定制化处理的方法
Aug 20 #Python
python实现抠图给证件照换背景源码
Aug 20 #Python
python爬虫 基于requests模块发起ajax的get请求实现解析
Aug 20 #Python
pytorch 在sequential中使用view来reshape的例子
Aug 20 #Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
Aug 20 #Python
python实现证件照换底功能
Aug 20 #Python
pytorch多进程加速及代码优化方法
Aug 19 #Python
You might like
帝国cms常用标签汇总
2015/07/06 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
基于zepto.js实现仿手机QQ空间的大图查看组件ImageView.js详解
2015/03/05 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
Bootstrap Table使用方法详解
2016/08/01 Javascript
浅谈JS中的bind方法与函数柯里化
2016/08/10 Javascript
jquery radio的取值_radio的选中_radio的重置方法
2016/09/20 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
js实现中文实时时钟
2020/01/15 Javascript
JS实现单张或多张图片持续无缝滚动的示例代码
2020/05/10 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
vue实现把接口单独存放在一个文件方式
2020/08/13 Javascript
用python实现批量重命名文件的代码
2012/05/25 Python
从零学python系列之教你如何根据图片生成字符画
2014/05/23 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
如何使用selenium和requests组合实现登录页面
2020/02/03 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
2020/11/29 Python
Clarks英国官方网站:全球领军鞋履品牌
2016/11/26 全球购物
澳大利亚女性快速时尚零售商:Ally Fashion
2018/04/25 全球购物
中学生学习生活的自我评价
2013/10/26 职场文书
KTV的创业计划书范文
2014/02/02 职场文书
聚美优品励志广告词
2014/03/14 职场文书
小露珠教学反思
2014/04/30 职场文书
2015年组织部工作总结
2015/04/03 职场文书
开会通知短信大全
2015/04/20 职场文书
庆祝教师节新闻稿
2015/07/17 职场文书
2019毕业论文致谢词
2019/06/24 职场文书
2019通用版劳动合同范本!
2019/07/11 职场文书