听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部

这两天

有小伙伴问小帅b

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

不返回给我数据

而且还甩一句话给我

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

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

小帅b看了一下他的代码

for i in range(1,10000):

requests.get(url)

瞬间震惊了

这就感觉

被连续 fxxk 了 1w 次

你说对方受得了?

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

不封你 IP 封谁?

要会伪装

要想想看

人是怎么访问网站的

这次我们来说说伪装 Header

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

那么

接下来就是

学习python的正确姿势

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》
《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

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

你要想想看

如果是别人爬取你的数据

你会做什么操作

你是不是也不想

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

你是不是也会

采取一定的措施

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》
《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

比如

小帅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)

没错

这个时候你确实获取到数据了

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》
《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

小帅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:5000
User-Agent: python-requests/2.21.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive

哇靠

User-Agent: python-requests/2.21.0

居然使用 python 的库来请求

你说小帅b不封你封谁呢?

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

所以小帅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 数据

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》
《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

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

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》
《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

记得看我的主页!

有了 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,你又获取到数据了

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

当然

仅仅是伪装自己是浏览器还不够的

要多站在对方的角度想问题

往后

小帅b还会继续跟你扯

怎么应对反爬虫的种种策略

peace

《听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部》

帅b老仙

法力无边

    原文作者:萌新程序员
    原文地址: https://zhuanlan.zhihu.com/p/59820924
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞