这两天
有小伙伴问小帅b
为什么我爬取 xx 网站的时候
不返回给我数据
而且还甩一句话给我
“系统检测到您频繁访问,请稍后再来”
小帅b看了一下他的代码
fori inrange(1,10000):
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 不可以访问
浏览器可以访问呀
所以你可以修改你的请求头
你可以先在浏览器访问
然后在抓取数据的时候获取到 Header 数据
当然你也可以使用 Chrome (可点击)的控制面板获取 Header
有了 Header 信息之后
恩,现在的你学会假装自己是浏览器了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)