前面写的程序都是使用了requests库的get方法来获取网页,
教条式的东西比如requests库的起源,原理,作用啥的,我就不细说了,到处都是,书上也很多,我就只写我认为可以派上用场的东西,当然这不是指我不说就不重要,该了解还是要了解的
get方法是模拟了浏览器发起的get请求,这个请求方法所发送的信息是包含在请求头里的,我们找一个看一下
这就是get方法向服务器发送的请求头headers
里面有很多参数,但我们现在不需要全部掌握,先了解下面这个个
User-Agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
顾名思义,Uesr-Agent 指明了这个请求的发起者,这里是chrome浏览器
如果我们使用 python 直接请求网页,然后打印他的 headers
url = 'https://httpbin.org/get'
response = requests.get(url, params=data)
print(response.text)
这里用了一个 https://httpbin.org/get
这是一个测试用的网址,最后的参数get表示测试get请求,暂时不需要对这个网址了解太多,知道它可以帮我们做一些简单的测试就行
它返回的结果是
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"User-Agent": "python-requests/2.22.0"
},
"origin": "1.194.187.57, 1.194.187.57",
"url": "https://httpbin.org/get"
}
这里的 User-Agnet 的值指明了我们用的python程序来请求的网页
一般网页都不喜欢被爬虫爬取,除了搜索引擎之外其他的爬虫爬取网页对这个网站的拥有者来说是没有任何好处的,反而会消耗服务器资源
所以像我们这种大摇大摆地喊着自己是爬虫程序去找服务器要信息的自然是会被一脚踢出来,所以我们需要做一下伪装
既然服务器使用 get 请求时将 User-Agent 设置为浏览器标识,那我们直接把浏览器标识拿过来自己构造一个 headers 不就行了吗?
实际上 get 也提供了这个参数,我们可以使用 headers 参数来指定请求头
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
}
url = 'https://httpbin.org/get'
response = requests.get(url, headers=headers)
print(response.text)
返回的结果是
{
"args": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "gzip, deflate",
"Host": "httpbin.org",
"Server": "swoole-http-server",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
},
"origin": "221.176.159.70, 221.176.159.70",
"url": "https://httpbin.org/get"
}
可以看到我们的 User-Agent 已经变成了 chrome 的标识
这样我们就可以绕过最基本的发爬虫措施,不会被服务器禁止了