当前位置: 首页 > news >正文

python反爬虫策略有哪些_python爬虫 urllib模块反爬虫机制UA详解

方法: 使用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 存放请求信息

blank.gif

blank.gif

反爬出机制:网站会检查请求的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("写入数据成功")

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

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

时间: 2019-08-17

相关文章:

  • tensorflow图形检测_TensorFlow入门
  • tcp序列号为什么是随机的_3000字讲讲TCP协议,握手挥手不是你想的那么简单
  • 华为swot分析2020_【分析】鸿蒙2.0要来?华为开发者大会2020时间确认!
  • spring循环依赖及解决方式_图解Spring解决循环依赖
  • python while跳出_python – 在while循环中生成绘图后在KeyboardInterrupt上退出
  • python斐波那契数列_Python 迭代器案例:生成斐波那契数列
  • 安卓安装python第三方库_python安装第三方库的方法(一般方式、easy
  • 后端中文收到的都是问号_学完这些后端技术栈,我秃了,也变强了!
  • bootstraptable获取所有数据_一文搞定Redis五大数据类型及应用场景
  • 华硕门店点亮系统_华硕ROG机电散热专访:一体化整合乃最大优势
  • exe打包工具_QT系列之如何打包可执行程序,让QT程序进入任意一台电脑
  • conda jupyter pytorch_PyTorch进阶之路(一):张量与梯度
  • pytorch dataset读取数据流程_动手学习深度学习Pytorch——线性回归
  • python如何将列表去掉引号_如何将你的 Python 项目全面自动化?
  • 用python进行自然语言处理_用python进行图片整理
  • [ JavaScript ] 数据结构与算法 —— 链表
  • JavaScript对象详解
  • JavaScript设计模式之工厂模式
  • Java应用性能调优
  • MQ框架的比较
  • mysql 5.6 原生Online DDL解析
  • PhantomJS 安装
  • REST架构的思考
  • Spring声明式事务管理之一:五大属性分析
  • vue-router的history模式发布配置
  • Vue学习第二天
  • 关于extract.autodesk.io的一些说明
  • 猴子数据域名防封接口降低小说被封的风险
  • 网络应用优化——时延与带宽
  • 小程序开发中的那些坑
  • 延迟脚本的方式
  • 怎么将电脑中的声音录制成WAV格式
  • 《天龙八部3D》Unity技术方案揭秘
  • Spring Batch JSON 支持
  • ​flutter 代码混淆
  • # Maven错误Error executing Maven
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #pragma预处理命令
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)计算机毕业设计ssm电影分享网站
  • (四)Android布局类型(线性布局LinearLayout)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • .babyk勒索病毒解析:恶意更新如何威胁您的数据安全
  • .Net 6.0 处理跨域的方式
  • .NET 指南:抽象化实现的基类
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net6+aspose.words导出word并转pdf
  • .NET的数据绑定
  • .NET的微型Web框架 Nancy