打开Python爬虫实战练习页面http请求分析及头构造使用_S02_Spiderbuf,看到页面上的内容跟前一个练习一模一样。
在页面上右键 -> 显示网页源代码,发现HTML源码也基本一样。那我们就直接把上一个练习的Python代码改一下URL运行一下。
# coding=utf-8
import requests
from lxml import etree
url = 'http://www.spiderbuf.cn/playground/s02'
html = requests.get(url).text
print(html)
很不幸,返回了403,爬虫代码没有成功爬取到网页内容。
这里给爬虫新手科普一下,返回403 Forbidden意思是服务器已经收到了你的请求了,但由于某些原因把你的请求屏蔽了。在爬虫里面通常就是被识别出你是爬虫,不给你返回内容。
浏览器在向服务器发送请求时,除了我们在浏览器地址栏输入的网址以外,还会带上很多浏览器参数的。要查看并分析这些参数,我们就需要用到浏览器的开发者工具。
开发者工具顾名思义,是给开发者用的,是浏览器提供的一个网页调试工具,基于Development Tools 协议的。如果想要在爬虫方面深入的小伙伴务必熟练掌握开发者工具的使用,以及Development Tools 协议。因为复杂的网页爬虫往往需要借助这两个东西才能开发出来。
我们在当前页面上打开开发者工具,可以按快捷键F12,有些环境这个快捷键无效,可以通过浏览器的菜单找到开发者工具菜单并点击打开。然后在开发者工具那里切换到Network(网络)这里,如果是空白的就刷新一下网页。
会看到很多乱七八糟的的东西出现了,第一个是s02,点击一下它,在右边会展开一个详情界面,并停留在Headers这个标签页,分了General、Response Headers、Request Headers,根据英文的内容就能知道Response是响应,就是服务器返回的,Request是请求,就是浏览器向服务器发送的。
我们现在主要先研究发送的东西,就先看看Request Headers。看到有好多东西,但根据爬虫的知识,通常反爬虫最基本也是应用得最多的就是User-Agent,所以我们就把里面User-Agent的值复制出来,并使用Python构造请求。
HTTP请求头是以字典的形式传输的,所以在Python里面也把它构造成一个字典,并放在一个变量里面。requests的get函数本身就有headers这个参数,把构造好的User-Agent传递给这个参数即可。
url = 'http://www.spiderbuf.cn/playground/s02'
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)
这样运行一下就发现爬虫已经能够把网页爬取下来了。
刚才也说了,反爬虫最基本也是应用得最多的就是User-Agent,所以我们在写爬虫的时候,应该每次都带上这个User-Agent的值。
有人会问为什么requests会被检测到呢?
其实requests向服务器发送请求时也会发送User-Agent,只不过它默认的值是这样的:
python-requests/2.32.3
这不就是明晃晃地跟服务器说我就是爬虫么。
想要深入了解爬虫与反爬虫的攻防以及调试方法,可以了解一下我的相关课程,该课程通过自己编写网站,做反爬与爬虫,并通过抓包软件等方式讲解了爬虫与反爬虫的爱恨情仇。
Udemy:《深入了解Python爬虫攻防》
完整示例代码:示例代码