Python爬虫实战N01User-Agent与Referer校验反爬图文教程

2024-12-30阅读数:114
上一篇:Python爬虫实战H01CSS样式偏移混淆文本内容的解析与爬取图文教程
下一篇:Python爬虫实战E03无序号翻页图文教程

打开Python爬虫实战练习页面User-Agent与Referer校验反爬_N01_Spiderbuf,可以看到页面很简单,内容是《2021胡润中国500强》排行榜。

在网页上点击右键 > 显示网页源代码,找到数据的起始位置,发现所有数据都明晃晃地放在HTML源码里面。这就不用多说了,这样的页面前面也爬过很多了,直接用Python写爬虫代码并运行。

url = 'http://www.spiderbuf.cn/playground/n01'
myheaders = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36'}
html = requests.get(url, headers=myheaders).text
print(html)

运行的时候发现,返回403了,被反爬了。

回到浏览器刷新一下页面,发现在浏览器里面刷新是正常的,那就排除了IP被封的可能性。打开浏览器开发者工具(F12)也没有发现动态加载的内容,那基本可以确定是请求参数的问题。请求参数我们之前有讲过,HTTP 协议的Requests Headers 会有很多由浏览器默认产生的参数发送到后台,之前的代码基本都加入了User-Agent,上面的代码也加了,但还是返回403,说明有参数是我们漏掉了。

在开发者工具Network(网络)界面,点击n01(如果是空白的就在开发者工具打开的状态下刷新一下网页),在右边展开的详情中找到Requests Headers,可以看到这里有很多参数。最常用的参数是User-Agent、Cookie、Host、Referer,我们把这些参数都加到代码里面逐一测试,发现只要同时加上User-Agent跟Referer就能够正常获取到数据了。

顺便说一下,这个Referer是指明了上一个页面,也就是说告诉后台是从哪个页面打开现在这个页面的,所以如果直接把http://www.spiderbuf.cn/playground/n01这个URL放在浏览器里面打开也是打不开的,因为Referer为空。

这个Referer参数应用得最多的地方就是图片的防盗链,就是我的网站的图片必须是在我的网站都能请求下来,否则就不响应。当然了,现在的防盗链会应用更高级的技术,因为这个Referer的方式太好破解了。

完整示例代码:示例代码