洗礼灵魂,修炼python(51)--爬虫篇—变色龙般的伪装
变色龙原理
变色龙这种动物想必大家都了解,它们会根据周遭环境的局势来改变自己的颜色,伪装自己。
那么爬虫有这种技能吗?当然是有的,先不着急说这个问题。
从上一篇开始,你有没有想过,站在网站管理的角度,如果在同一时间段,大家全部利用爬虫程序对自己的网站进行爬取操作,那么这网站服务器能不能承受这种负荷?肯定不能啊,如果严重超负荷则会时服务器宕机(死机)的,对于一些商业型的网站,宕机一秒钟的损失都是不得了的,这不是一个管理员能承担的,对吧?那管理员会网站服务器做什么来优化呢?我想到的是,写一个脚本,当检测到一个IP访问的速度过快,报文头部并不是浏览器的话,那么就拒绝服务,或者屏蔽IP等,这样就可以减少服务器的负担并让服务器正常进行。
那么既然服务器做好了优化,但你知道这是对爬虫程序的优化,如果你是用浏览器来作为一个用户访问的话,服务器是不会拦截或者屏蔽你的,它也不敢拦你,为什么,你现在是客户,它敢拦客户,不想继续经营了是吧?所以对于如果是一个浏览器用户的话,是可以正常访问的。
所以想到方法了吗?是的,把程序伪造成一个浏览器啊,前面说过服务器会检测报文头部信息,如果是浏览器就不正常通行,如果是程序就拒绝服务。
那么报文是什么?头部信息又是什么?详细的就不解释了,这涉及到http协议和tcp/ip三次握手等等的网络基础知识,感兴趣的自己百度或者谷歌吧。
本篇博文不扯远了,只说相关的重点——怎么查看头部信息。
User-Agent
其实我想有些朋友可能有疑惑,服务器是怎么知道我们使用的是程序或者浏览器呢?它用什么来判断的?这么玄乎?不玄乎,但确实可以,好的,我就用博客园的当前我正在编辑的博文页面为例:
我使用的是火狐浏览器,鼠标右键-查看元素(有的浏览器是审查元素或者检查)
网络(有的是network):
出现报文:
双击它, 右边则会出现详细的信息,选择消息头(有的是headers)
找到请求头(request headers),其中的User-Agent就是我们头部信息:
看到是显示的
# -*- coding:utf-8 -*- import urlliburl='http://www.baidu.com' #百度网址 html=urllib.urlopen(url)#利用模块urllib里的urlopen方法打开网页 print(dir(html)) #查看对象html的方法 print(urllib.urlopen) #查看对象urllib.urlopen的方法 print(urllib.urlopen()) #查看对象urllib.urlopen实例化后的方法
Traceback (most recent call last):File "D:\programme\PyCharm 5.0.3\helpers\pycharm\utrunner.py", line 121, in <module>modules = [loadSource(a[0])]File "D:\programme\PyCharm 5.0.3\helpers\pycharm\utrunner.py", line 41, in loadSourcemodule = imp.load_source(moduleName, fileName)File "G:\programme\Python\python project\test.py", line 8, in <module>print(urllib.urlopen()) TypeError: urlopen() takes at least 1 argument (0 given)['__doc__', '__init__', '__iter__', '__module__', '__repr__', 'close', 'code', 'fileno', 'fp', 'getcode', 'geturl', 'headers', 'info', 'next', 'read', 'readline', 'readlines', 'url']<function urlopen at 0x0297FD30>
由此,这里就必须注意,只有当urllib.urlopen()实例化后才有其后面的方法,urlopen会返回一个类文件对象,urllib.urlopen只是一个对象,而urllib.urlopen()必须传入一个参数,不然则报错。
urlopen提供了如下方法:
- read() , readline() , readlines() , fileno() , close() :这些方法的使用方式与文件对象完全一样
- info():返回一个httplib.HTTPMessage 对象,表示远程服务器返回的头信息
- getcode():返回Http状态码。如果是http请求,200表示请求成功完成;404表示网址未找到
- geturl():返回请求的url
- headers:返回请求头部信息
- code:返回状态码
- url:返回请求的url
好的,详细的自己去研究了,本篇博文的重点终于来了,伪装一个头部信息
伪造头部信息
由于urllib没有伪造头部信息的方法,所以这里得使用一个新的模块,urllib2
# -*- coding:utf-8 -*- import urllib2url='http://www.baidu.com'head={'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0' } #头部信息,必须是一个字典 html=urllib2.Request(url,headers=head) result=urllib2.urlopen(html) print result.read()
或者你也可以这样:
# -*- coding:utf-8 -*- import urllib2url='http://www.baidu.com'html=urllib2.Request(url) html.add_header('User-Agent','Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0') #此时注意区别格式 result=urllib2.urlopen(html) print result.read()
结果都一样的,我也就不展示了。
按照上面的方法就可以伪造请求头部信息。
那么你说,我怎么知道伪造成功了?还有不伪造头部信息时,显示的到底是什么呢?介绍一个抓包工具——fidder,用这个工具就可以查看到底报文头部是什么了。这里就不展示了,自己下去常识了。并且我可以确切的保证,确实伪造成功了。
这样,我们就把爬虫代码升级了一下,可以搞定普通的反爬虫限制。
免责声明
本博文只是为了分享技术和共同学习为目的,并不出于商业目的和用途,也不希望用于商业用途,特此声明。如果内容中测试的贵站站长有异议,请联系我立即删除
转载于:https://www.cnblogs.com/Eeyhan/p/7766904.html
洗礼灵魂,修炼python(51)--爬虫篇—变色龙般的伪装相关推荐
- 【python】爬虫篇:python对于html页面的解析(二)
我,菜鸡,有什么错误,还望大家批评指出!! 前言: 根据自己写的上一篇文章,我继续更第二部分的内容,详情请点击如下链接 [python]爬虫篇:python连接postgresql(一):https: ...
- 小白学Python之爬虫篇(一)——爬取PPT网站模板
说明 菜狗大学生一枚,本着用什么学什么的原则,对之前简单学习的爬虫进行略微系统的整理,一方面方便以后复习,另一方面也希望给需要的人一点参考,毕竟看了那么多大佬的博客,是时候开始回报社会了哈哈哈(尴尬笑 ...
- 【零基础学Python】爬虫篇 :第十四节--爬虫+词云解决实际问题
十行代码帮助小姐姐给偶像送上最真挚的礼物----爬虫词云齐上阵,熬夜精心制作 905.png#pic_center) 故事背景 最近嘛,有位朋友找我帮忙嘛,希望我帮她做一份礼物,送给一直鼓舞着她不断向 ...
- Python(爬虫篇)--- 验证码破解【一】图片、文字验证码
文章目录 一.图片验证码概述 (一)机器视觉 (二)OCR库概述 (1)Tesseract 简介 (2)Tesseract 缺点 二.方式一:Selenium手动打码 三.方式二:使用三方打码平台 ( ...
- 小白学Python之爬虫篇(二)——隐式资源链接查找与爬取
说明 在上一篇文章中,我们对PPT网站的模板进行了爬取,该网站中,每个模板的详情网页直接包含目标资源的链接,因此只需遍历列表中的模板,依次提取链接即可,是一种十分简单的爬虫程序.对于某些稍微复杂些的网 ...
- 洗礼灵魂,修炼python(70)--爬虫篇—补充知识:json模块
在前面的某一篇中,说完了pickle,但我相信好多朋友都不懂到底有什么用,那么到了爬虫篇,它就大有用处了,而和pickle很相似的就是JSON模块 JSON 1.简介 1)JSON(JavaScrip ...
- 洗礼灵魂,修炼python(85)-- 知识拾遗篇 —— 深度剖析让人幽怨的编码
编码 这篇博文的主题是,编码问题,老生常谈的问题了对吧?从我这一套的文章来看,前面已经提到好多次编码问题了,的确这个确实很重要,这可是难道了很多能人异士的,当你以为你学懂了,在研究爬虫时你发现你错了, ...
- 自学python推荐书籍 知乎-在知乎上学 Python - 爬虫篇
知乎是个好地方.虽然近年来,为了吸引更多的用户,知乎的定位与早期略有点偏离.但从内容质量和专业性来说,知乎仍然是国内数一数二的知识型社区.不少同学都是通过知乎发现了我们编程教室,我自己也经常会通过知乎 ...
- Python开发爬虫之理论篇
爬虫简介 爬虫:一段自动抓取互联网信息的程序. 什么意思呢? 互联网是由各种各样的网页组成.每一个网页对应一个URL,而URL的页面上又有很多指向其他页面的URL.这种URL之间相互的指向关系就形成了 ...
最新文章
- javascript内置顶层函数
- rust腐蚀 木制窗户怎么修_冬天装修后怎么去除甲醛?紧闭门窗和准备一盆水,轻松教你解决!...
- 简述ospf的工作原理_全方位了解OSPF的工作原理以及涉及到的重要技术
- 一步步解析Attention is All You Need
- Leaflet中使用leaflet-sidebar插件实现侧边栏效果
- 《数据库SQL实战》统计出当前各个title类型对应的员工当前薪水对应的平均工资。
- Swift - 26 - 函数的基础写法
- R语言观察日志(part21)--包的组件之元数据
- 介绍“又一个” Cloud Foundry Gradle插件
- 让内核突破512字节的限制
- Apache nifi 集群安装
- ActiveMQ之消息服务器平台(发邮件)
- 从报表到大数据分析,BI工具如何提高用户体验
- 总被业务当工具人,数据IT人怎么才能提高自己在公司的地位?
- Maven的-pl -am -amd参数学习 -am 踩过的坑
- 织梦采集侠-dede织梦采集发布
- 魅族 android版本升级,魅族系统更新APP
- HTML+CSS实现静态小米商城首页(附完整代码)
- AppFuse 2.1的安装运行步骤------利用Maven构建appfuse
- 西电2019计算机等级考试,西安电子科技大学2019《计算方法》期末考试试题