python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部
这两天
有小伙伴问小帅b
为什么我爬取 xx 网站的时候
不返回给我数据
而且还甩一句话给我
“系统检测到您频繁访问,请稍后再来”

小帅b看了一下他的代码
for i in range(,):
requests.get(url)
瞬间震惊了
这就感觉
被连续 fxxk 了 1w 次
你说对方受得了?

不封你 IP 封谁?
要会伪装
要想想看
人是怎么访问网站的
这次我们来说说伪装 Header

那么
接下来就是
学习python的正确姿势

当你要去爬取某个网站的数据的时候
你要想想看
如果是别人爬取你的数据
你会做什么操作
你是不是也不想
让别人随随便便就疯狂请求你的服务器
你是不是也会
采取一定的措施

比如
小帅b有一个网站
你分析到了小帅b的地址
当你想要通过 python 来爬取的时候...
恩
小帅b来写一个简单的可以被请求的例子
from flask import Flaskapp = Flask(__name__)@app.route('/getInfo')def hello_world():return "这里假装有很多数据"if __name__ == "__main__":app.run(debug=True)
ok
假设你现在分析到了小帅b的地址了
也就是可以通过 /getInfo 就可以获取到小帅b网站上的数据了
你感觉很爽
就开始请求了
url = 'http://127.0.0.1:5000/getInfo'response = requests.get(url)print(response.text)
没错
这个时候你确实获取到数据了

小帅b觉得有点不对劲了
想看看请求的 header 信息
@app.route('/getInfo')def hello_world():print(request.headers)return "这里假装有很多数据"if __name__ == "__main__":app.run(debug=True)
结果看到的 headers 信息是这样的
Host: 127.0.0.1:5000User-Agent: python-requests/2.21.0Accept-Encoding: gzip, deflateAccept: */*Connection: keep-alive
哇靠
User-Agent: python-requests/2.21.0
居然使用 python 的库来请求
你说小帅b不封你封谁呢?

所以小帅b这个时候进行判断
你就获取不到数据了
@app.route('/getInfo')def hello_world():if(str(request.headers.get('User-Agent')).startswith('python')):return "小子,使用爬虫是吧?滚你的"else:return "这里假装有很多数据"if __name__ == "__main__":app.run(debug=True)
你这个时候的请求
if __name__ == '__main__':url = 'http://127.0.0.1:5000/getInfo'response = requests.get(url)print(response.text)
得到的结果就是
小子,使用爬虫是吧?滚你的
你已经在小帅b面前暴露了
那么怎么办呢?
伪装自己呗
python 不可以访问
浏览器可以访问呀
所以你可以修改你的请求头
还记得 Fiddler(可点击)吗?
你可以先在浏览器访问
然后在抓取数据的时候获取到 Header 数据

当然你也可以使用 Chrome (可点击)的控制面板获取 Header

有了 Header 信息之后
就可以使用 requests(可点击)模块轻松获取
恩,现在的你学会假装自己是浏览器了
if __name__ == '__main__':headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'}url = 'http://127.0.0.1:5000/getInfo'response = requests.get(url,headers=headers)print(response.text)
再获取一次可以发现
返回的是
这里假装有很多数据
ok,你又获取到数据了

当然
仅仅是伪装自己是浏览器还不够的
要多站在对方的角度想问题
往后
小帅b还会继续跟你扯
怎么应对反爬虫的种种策略
peace

帅b老仙
法力无边

与本文相关的文章
python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部的更多相关文章
- 【Python爬虫】听说你又闹书荒了?豆瓣读书9.0分书籍陪你过五一
说明 五一将至,又到了学习的季节.目前流行的各大书单主打的都是豆瓣8.0评分书籍,却很少有人来聊聊这9.0评分的书籍长什么样子.刚好最近学了学python爬虫,那就拿豆瓣读书来练练手. 爬虫 本来思路 ...
- Python爬虫常用小技巧之设置代理IP
设置代理IP的原因 我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站.假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问.所以你可以设置一些代理服务器来 ...
- python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的
快 快了 啊 嘿 小老弟 想啥呢 今天这篇爬虫教程的主题就是一个字 快 想要做到秒爬 就需要知道 什么是多进程 什么是多线程 什么是协程(微线程) 你先去沏杯茶 坐下来 小帅b这就好好给你说道说道 关 ...
- Python爬虫实战——反爬策略之代理IP【无忧代理】
一般情况下,我并不建议使用自己的IP来爬取网站,而是会使用代理IP. 原因很简单:爬虫一般都有很高的访问频率,当服务器监测到某个IP以过高的访问频率在进行访问,它便会认为这个IP是一只"爬虫 ...
- Python 爬虫练习(一) 爬取国内代理ip
简单的正则表达式练习,爬取代理 ip. 仅爬取前三页,用正则匹配过滤出 ip 地址和 端口,分别作为key.value 存入 validip 字典. 如果要确定代理 ip 是否真的可用,还需要再对代理 ...
- python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会
我们上次说了伪装头部 ↓ python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 ...
- Python 爬虫入门(二)——爬取妹子图
Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...
- Python爬虫系列(三):requests高级耍法
昨天,我们更多的讨论了request的基础API,让我们对它有了基础的认知.学会上一课程,我们已经能写点基本的爬虫了.但是还不够,因为,很多站点是需要登录的,在站点的各个请求之间,是需要保持回话状态的 ...
- python爬虫14 | 就这么说吧,如果你不懂python多线程和线程池,那就去河边摸鱼!
你知道吗? 在我的心里 你是多么的重要 就像 恩 请允许我来一段 freestyle 你们准备好了妹油 你看 这个碗 它又大又圆 就像 这条面 它又长又宽 你们 在这里 看文章 觉得 很开心 就像 我 ...
随机推荐
- 金典 SQL笔记 SQL语句汇总
SELECT * FROM (SELECT ROW_NUMBER() OVER ( ORDER BY id) AS rowN,FNumber, FName,FSalary ,Fage FROM dbo ...
- The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.
EventLog.SourceExists https://stackoverflow.com/questions/9564420/the-source-was-not-found-but-some- ...
- Sql2005常用函数大全
--聚合函数use pubsgoselect avg(distinct price) --算平均数from titleswhere type='business'go use pubsgoselect ...
- P2120 [ZJOI2007]仓库建设 斜率优化dp
好题,这题是我理解的第一道斜率优化dp,自然要写一发题解.首先我们要写出普通的表达式,然后先用前缀和优化.然后呢?我们观察发现,x[i]是递增,而我们发现的斜率也是需要是递增的,然后就维护一个单调递增 ...
- IDEA Spark Streaming 操作(套接字流)-----make socket数据源
import java.io.PrintWriter import java.net.ServerSocket import scala.io.Source object DStream_makeSo ...
- Java 日期时间 Date类型,long类型,String类型表现形式的转换 (转)
Java 日期时间 Date类型,long类型,String类型表现形式的转换 1.java.util.Date类型转换成long类型java.util.Date dt = new Date();Sy ...
- 如何使jquery性能最佳
转自 http://www.cnblogs.com/mo-beifeng/archive/2012/02/02/2336228.html 1. 使用最新版本的jQuery jQuery的版本更新很快, ...
- JavaScript中相等==和严格相等===的区别
在JavaScipt中==(相等)和===(严格相等,strick equality 也有译作“恒等”.“全等”)用于比较两个值是否相等,两个运算符允许任意类型的操作数.如果操作数相等则返回true, ...
- Django总结二
- 创建app应用与ORM操作 - Django项目project - app(应用) -> 不同的功能放在不同的app中 - 命令 : - 创建app python manage.py sta ...
- Android App签名(为apk签名)
最近有朋友问到 android 签名的问题,所以转一篇给大家分享: 这篇文章是android开发人员的必备知识,是我特别为大家整理和总结的,不求完美,但是有用. 1.签名的意义 为了保证每个应用程序开 ...