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

这两天

有小伙伴问小帅b

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

不返回给我数据

而且还甩一句话给我

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

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

小帅b看了一下他的代码

for i in range(1,10000):

    requests.get(url)

瞬间震惊了

这就感觉

被连续 fxxk 了 1w 次

你说对方受得了?

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

不封你 IP 封谁?

要会伪装

要想想看

人是怎么访问网站的

这次我们来说说伪装 Header

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

那么

接下来就是

学习python的正确姿势

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

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

你要想想看

如果是别人爬取你的数据

你会做什么操作

你是不是也不想

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

你是不是也会

采取一定的措施

python爬虫17 | 听说你又被封 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)

没错

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

python爬虫17 | 听说你又被封 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.0Accept-Encoding: gzip, deflate
Accept: */*Connection: keep-alive

哇靠

User-Agent: python-requests/2.21.0

 

居然使用 python 的库来请求

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

python爬虫17 | 听说你又被封 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 数据

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

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

python爬虫17 | 听说你又被封 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,你又获取到数据了

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

当然

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

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

往后

小帅b还会继续跟你扯

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

peace

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

帅b老仙

法力无边

 

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

与本文相关的文章

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

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

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

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

原文始发于微信公众号(学习python的正确姿势):python爬虫17 | 听说你又被封 ip 了,你要学会伪装好自己,这次说说伪装你的头部

发表回复