这阵子在学习爬虫,做练习需要一个禁止爬虫且只需添加Header就能绕过的网站。运气不错,找到一个HTTPS协议的,考虑到该网站内容比较special(人类进步的阶梯^_^),所以本文会把网站的相关信息码掉。
  python处理http协议部分,本文采用的是urllib.request,没有用Requests。通过相关网站介绍可知,如果采用这个库,本文中各个实现的代码会少些,也不会遇到我后面处理的gzip解压缩问题。不过对于我这种新手来说,有时适当踩些坑有利于学习,毕竟“朝抵抗力最大的路径走”,收获的东西会更多。
  在做Demo时,Python提示–> urlopen error unknown url type: https,也就是不支持https协议。随后查到是安装Python时,系统没有安装openssl-devel导致,因此需重新安装openssl-devel库 –>具体可以参考python内置的urllib模块不支持https协议的解决办法。不同于文章介绍的,我的系统是Ubuntu,而Ubuntu采用的安装指令是下面这两条。

sudo apt-get install openssl
sudo apt-get install libssl-dev

  安装好openssl-devel库后,重新安装一遍Python,采用如下代码测试,不再提示不支持,也确认该网站是禁止爬虫的。 

#!/usr/local/bin/python3
#-*- coding: utf-8 -*-
import urllib.requesturl='https://abc.de/'
urllib.request.urlretrieve(url, 'test.html')

  这个网站真是练爬虫第一关的不错选择,对付这个网站的反爬虫策略,解法是通过urllib.request中添加http请求头部字段,实现模拟浏览器访问,具体代码如下。下面的这些字段都是通过chrome的F12抓下来的,删除了一部分:

#!/usr/local/bin/python3
#-*- coding: utf-8 -*-
import urllib.requesturl='https://abc.de/'
req = urllib.request.Request(url)
req.add_header('Host', 'abc.de')
req.add_header('Connection','keep-alive')
req.add_header('Cache-Control','max-age=0')
req.add_header('Upgrade-Insecure-Request','1')
req.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36')
req.add_header('Accept','text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8')
req.add_header('Accept-Encoding', 'gzip, deflate, sdch, br')
req.add_header('Accept-Language','zh-CN,zh;q=0.8,en;q=0.6')data = urllib.request.urlopen(req).read()print(data)

  实际测试绕过成功,不再提示403 forbidden了。不过出现新的问题,抓下来的数据是一大波encode的数据。一开始我以为是编码问题,于是根据网页的charset信息加了data.decode(‘utf-8’),但提示报错,随后尝试其他各种编解码处理方式都没有用。

  无计之下,重新回来看response header,在看到content-encoding字段的时候,才想起还有一个幺蛾子,所以google解决方案,随后参考Python 抓取网页乱码原因分析添加如下代码

  专栏代码实现不能直接套用,有错误,因此添加调整代码如下:

#-*- coding: utf-8 -*-
import urllib.request
import gzip
import io data = urllib.request.urlopen(req)
encoding = data.getheader('Content-Encoding')
content = data.read()
if encoding == 'gzip':buf = io.BytesIO(content)gf = gzip.GzipFile(fileobj=buf)content = gf.read()#with open('test.html',"wb") as fb:
#    fb.write(data)print(content)

  调整后测试效果如下,成功绕过反爬策略和实现gzip解压,解决了数据无法识别的问题。

  考虑到上面添加header的方式比较麻烦,而参考书中提供的另一种方式也半斤八两,所以我尝试了另一种方式,具体代码如下。测试时也发现网站,去除Accept-Language会导致绕过失败,依旧返回403错误。这也就说明,该网站是通过多个字段来判别是否为爬虫访问,所以以后处理的时候,可以尽量把正常访问时浏览器提交字段都提交一遍,避免不必要的麻烦。

#!/usr/local/bin/python3
#-*- coding: utf-8 -*-
import urllib.request
import gzip
import io '''[TEST]'''
url = 'https://abc.de/'Headers = {'Host':'abc.de','Connection':'keep-alive','Cache-Control':'max-age=0','Upgrade-Insecure-Request':'1','User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36','Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding':'gzip, deflate, sdch, br','Accept-Language':'zh-CN,zh;q=0.8,en;q=0.6'
}req = urllib.request.Request(url, None, Headers)
data =urllib.request.urlopen(req).read()
print(data)

反爬虫绕过初级——添加http header和gzip解压处理相关推荐

  1. mysql解压版怎么添加服务_Windows系统下MySQL添加到系统服务方法(mysql解压版)

    MySQL软件版本:64位 5.7.12 1.首先配置MySQL的环境变量,在系统环境变量Path的开头添加MySQL的bin目录的路径,以";"结束,我的路径配置如下: 2.修改 ...

  2. python3反爬虫原理与绕过实战 网盘_Python 3反爬虫原理与绕过实战

    第 1章 开发环境配置 1 1.1 操作系统的选择 1 1.1.1 Ubuntu 简介 1 1.1.2 VirtualBox 的安装 2 1.1.3 安装 Ubuntu 3 1.1.4 全屏设置 8 ...

  3. Python-3反爬虫原理与绕过实战

    资源收集来源网络,仅供学习测试,版权归原作者所有,如有侵权,请联系删除 Python-3反爬虫原理与绕过实战.pdf: https://url91.ctfile.com/f/957191-696550 ...

  4. Python 爬虫工程师必看,深入解读字体反爬虫

    字体反爬虫开篇概述 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这 ...

  5. 用前考虑清楚,伤敌一千自损八百的字体反爬虫

    内容选自即将出版的<Python3 反爬虫原理与绕过实战>,本次公开书稿范围为第 6 章--文本混淆反爬虫.本篇为第 6 章中的第 4 小节,其余小节将逐步放送. 字体反爬虫开篇概述 在 ...

  6. 大型企业都在用的Python反爬虫手段,破了它!

    SVG 映射反爬虫 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这 ...

  7. 大厂在用的Python反爬虫手段,破了它!

    SVG 映射反爬虫 SVG 是用于描述二维矢量图形的一种图形格式.它基于 XML 描述图形,对图形进行放大或缩小操作都不会影响图形质量.矢量图形的这个特点使得它被广泛应用在 Web 网站中. 接下来我 ...

  8. 深入细枝末节,Python的字体反爬虫到底怎么一回事

    内容选自 即将出版 的<Python3 反爬虫原理与绕过实战>,本次公开书稿范围为第 6 章--文本混淆反爬虫.本篇为第 6 章中的第 4 小节,其余小节将 逐步放送 . 字体反爬虫开篇概 ...

  9. 一线大厂在用的反爬虫方法,看我如何破了它!

    内容选自即将出版的<Python3 反爬虫原理与绕过实战>,本次公开书稿范围为第 6 章--文本混淆反爬虫.本篇为第 6 章中的第 3 小节 SVG 反爬虫. SVG 映射反爬虫 SVG ...

  10. Scrapy绕过反爬虫策略汇总

    文章目录 一.Scrapy无法返回爬取内容的几种可能原因 1,ip封锁爬取 2,xpath路径不对 3,xpath路径出现font,tbody标签 4,xpath路径不够明确 5,robot协议 6, ...

最新文章

  1. ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?
  2. NSDate获取当前时区的时间
  3. keras从入门到放弃(二十二)一维卷积处理 RNN文本分类
  4. 使用t-sql语句修改表中的某些数据及数据类型。_Java面试——数据库知识点
  5. 基于Visual C++2013拆解世界五百强面试题--题5-自己实现strstr
  6. linux go 安装路径,在Alpine Linux D的路径中找不到已安装的Go二进制文件
  7. HTTP代理模块(HTTP Proxy)
  8. centos6.8 mysql5.6_Centos6.8 Mysql5.6 安装配置教程(转)
  9. 【算法编程】旋转数组查找最小数字
  10. matlab如何预测数据,matlab预测数据
  11. kodi没有声音_如何使用Yatse用声音(及更多)控制Kodi
  12. 基于因子分析和聚类分析 的SPSS河南省各地区综合发展分析+操作步骤+全文详细
  13. 【PS】如何简单的处理带晒伤皮肤的婚纱照?红斑/脱皮/减淡红色
  14. 关于运行软件报错Address already in use
  15. [UE] 在虚幻中使用动画序列和分层骨骼混合简单实现角色看向
  16. 福田区有哪些公园好玩 你都去过吗
  17. 号码归属地及运营商查询工具
  18. storm32云台说明书_俄版SimpleBGC、Storm32开源三轴云台软硬件以及调参软件说明书-V1.02...
  19. hbase命令集(shell 命令,如建表,清空表,增删改查)
  20. 70个JavaScript面试题集锦,内含解答,自测 JS 掌握程度

热门文章

  1. 分享软件测试计划模板
  2. WebPlotDigitizer使用教程
  3. 三菱触摸屏怎么改时间_三菱plc的触摸屏程序,三菱触摸屏如何更改时间
  4. 手把手教学暴力破解WIFI密码(仅供学习交流)
  5. linux中c语言开发环境,1.1 Linux下的C语言开发环境
  6. 二元函数连续性知识点总结
  7. java打印list_java打印list中的元素
  8. avx2指令集对php有用吗,AVX2指令集:AVX指令集的加强版
  9. android 描点抠图源码,一款功能强大的AI驱动一键安卓抠图软件,人物商品图章签名logo...
  10. SP3485,MAX485