这两天


有小伙伴问小帅b


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


不返回给我数据


而且还甩一句话给我


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




小帅b看了一下他的代码


for i in range(1,10000):

    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.真的求求你们了,不要再来爬取了


相关阅读