这两天

有小伙伴问小帅b

为什么我爬取 xx 网站的时候

不返回给我数据

而且还甩一句话给我

“系统检测到您频繁访问,请稍后再来”

小帅b看了一下他的代码

for i in range(,):

requests.get(url)

瞬间震惊了

这就感觉

被连续 fxxk 了 1w 次

你说对方受得了?

不封你 IP 封谁?

要会伪装

要想想看

人是怎么访问网站的

这次我们来说说伪装 Header

那么

接下来就是

学习python的正确姿势

当你要去爬取某个网站的数据的时候

你要想想看

如果是别人爬取你的数据

你会做什么操作

你是不是也不想

让别人随随便便就疯狂请求你的服务器

你是不是也会

采取一定的措施

比如

小帅b有一个网站

你分析到了小帅b的地址

当你想要通过 python 来爬取的时候...

小帅b来写一个简单的可以被请求的例子

from flask import Flask
app = 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老仙

法力无边

 

与本文相关的文章

1.教你在 Chrome 浏览器轻松抓包

2.教你通过 Fiddler 进行手机抓包

3.Requests库把urllib库拍在沙滩上

4.真的求求你们了,不要再来爬取了

python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部的更多相关文章

  1. 【Python爬虫】听说你又闹书荒了?豆瓣读书9.0分书籍陪你过五一

    说明 五一将至,又到了学习的季节.目前流行的各大书单主打的都是豆瓣8.0评分书籍,却很少有人来聊聊这9.0评分的书籍长什么样子.刚好最近学了学python爬虫,那就拿豆瓣读书来练练手. 爬虫 本来思路 ...

  2. Python爬虫常用小技巧之设置代理IP

    设置代理IP的原因 我们在使用Python爬虫爬取一个网站时,通常会频繁访问该网站.假如一个网站它会检测某一段时间某个IP的访问次数,如果访问次数过多,它会禁止你的访问.所以你可以设置一些代理服务器来 ...

  3. python爬虫13 | 秒爬,这多线程爬取速度也太猛了,这次就是要让你的爬虫效率杠杠的

    快 快了 啊 嘿 小老弟 想啥呢 今天这篇爬虫教程的主题就是一个字 快 想要做到秒爬 就需要知道 什么是多进程 什么是多线程 什么是协程(微线程) 你先去沏杯茶 坐下来 小帅b这就好好给你说道说道 关 ...

  4. Python爬虫实战——反爬策略之代理IP【无忧代理】

    一般情况下,我并不建议使用自己的IP来爬取网站,而是会使用代理IP. 原因很简单:爬虫一般都有很高的访问频率,当服务器监测到某个IP以过高的访问频率在进行访问,它便会认为这个IP是一只"爬虫 ...

  5. Python 爬虫练习(一) 爬取国内代理ip

    简单的正则表达式练习,爬取代理 ip. 仅爬取前三页,用正则匹配过滤出 ip 地址和 端口,分别作为key.value 存入 validip 字典. 如果要确定代理 ip 是否真的可用,还需要再对代理 ...

  6. python爬虫18 | 就算你被封了也能继续爬,使用IP代理池伪装你的IP地址,让IP飘一会

    我们上次说了伪装头部 ↓ python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部 让自己的 python 爬虫假装是浏览器 小帅b主要是想让你知道 在爬取网站的时候 ...

  7. Python 爬虫入门(二)——爬取妹子图

    Python 爬虫入门 听说你写代码没动力?本文就给你动力,爬取妹子图.如果这也没动力那就没救了. GitHub 地址: https://github.com/injetlee/Python/blob ...

  8. Python爬虫系列(三):requests高级耍法

    昨天,我们更多的讨论了request的基础API,让我们对它有了基础的认知.学会上一课程,我们已经能写点基本的爬虫了.但是还不够,因为,很多站点是需要登录的,在站点的各个请求之间,是需要保持回话状态的 ...

  9. python爬虫14 | 就这么说吧,如果你不懂python多线程和线程池,那就去河边摸鱼!

    你知道吗? 在我的心里 你是多么的重要 就像 恩 请允许我来一段 freestyle 你们准备好了妹油 你看 这个碗 它又大又圆 就像 这条面 它又长又宽 你们 在这里 看文章 觉得 很开心 就像 我 ...

随机推荐

  1. MapReduce02

    ====================== MapReduce实现 ====================== Input: 一系列key/value对 用户提供两个函数实现: map(k,v) ...

  2. loj 101 最大流

    冬令营送到我脸上的20分都没拿全 心态爆炸 冬令营前一天学的dinic 后一天才发出来 #include<iostream> #include<cstdio> #include ...

  3. struts2里result类型Stream的参数配置

    转自:https://blog.csdn.net/q714699280/article/details/51756126 contentType 内容类型,和互联网MIME标准中的规定类型一致,例如t ...

  4. zabbix监控kafka消费

    一.Kafka监控的几个指标 1.lag:多少消息没有消费 lag=logsize-offset 2.logsize:Kafka存的消息总数 3.offset:已经消费的消息 Kafka管理工具 介绍 ...

  5. Android开发之Thread类分析 (转载)

    转自:http://blog.csdn.net/llping2011/article/details/9706599 在我们Linux系统中创建线程函数为:pthread_create(),在Andr ...

  6. Linux学习大纲

  7. [Swift通天遁地]九、拔剑吧-(3)创建多种自定义Segment分段样式的控件

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  8. 微信小程序连接Java后台

    有人问我小程序怎么连后台,这里直接贴代码 在app.js里 // api request request(url, params) { return new Promise((resolve, rej ...

  9. Android 关于android.os.Build介绍

    关于Build类的介绍 这个类为一个获取设备一些初始化信息的类,该类的主要信息都是通过一些static的字段获得: public static final String BOARD The name ...

  10. Log4J2的 PatternLayout

    Log4J2 PatternLayout 参考 日志样例 : 2018-10-21 07:30:05,184 INFO - DeviceChannelServiceImpl.java:434[defa ...