浅析HTTP请求中各部分参数

我们向一个网址发起请求,这个网址所在的服务器会相应地返回我们一个结果,这个结果就是响应。

无论是请求还是响应,都会隐形地携带很多和请求、响应有关的内容,接下来,我们就来看看都会携带哪些参数(参数有很多,我们挑下重要的讲讲)。

打开Chrome的开发者工具,然后来看看请求报文中我们需要了解哪些与爬虫有关的信息。
在这里插入图片描述1.method:这个字段是用来指明请求的方法是哪一种的,常用的请求方法有GET、POST。

如果method是GET的时候,在使用requests的时候,就只能用requests.get(),比如这样:

>>>import requests
>>>response = requests.get('https://www.zhihu.com')

如果method是POST的时候,在使用requests的时候,就只能用requests.post(),而post是请求是需要传递数据的,这个之后会详细介绍。比如这样:

import requests
data = {
  'username': 'joe',
  'password': '123456'
}
response = requests.post('https://www.wzhihu.com', data=data)

至于用GET还是POST去请求网页,完全由网页的开发者来决定。

2.Accept:这个字段是用来通知服务器,用户代理(浏览器等客户端)能够处理的媒体类型及媒体类型的相对优先级。可以使用type/subtype这种形式,一次可指定多种媒体类型。常用的媒体类型有以下几类:

文本文件:text/html,text/plain,text/css,application/xhtml+xml,application/xml…
图片文件:image/jpeg,image/gif,image/png…
视频文件:video/mpeg,vedio/quicktime…
应用程序使用的二进制文件:application/octer-stream,application/zip…

比如说,浏览器不支持图片PNG的显示,那么accept就不指定image/png,因为浏览器处理不了。

3.Cookie:客户端发起请求时,服务器会返回一个键值对形式的数据给浏览器,下一次浏览器再访问这个域名下的网页时,就需要携带这些键值对数据在 Cookie中,用来记录用户在当前域名下的历史行为的。

提到Cookie就不得不提,HTTP本身是一种无状态的协议,它是不会保存每次请求和响应的相关信息的,就比如我们登录淘宝,如果没有Cookie技术,那么我们每进入一个淘宝的页面都需要重新登录一次,这样是不是会特别麻烦?

就是因为这个原因,才引入了Cookie技术,使得用户在一个域名下的历史行为能够得以保存,只要登录一次淘宝就可以了,不需要频繁地登录,而且能够看到历史记录。

这个字段很重要,在爬虫中经常会用到,因为有的数据只有携带了Cookie才能够爬取到,所以经常会根据前次访问得到 cookie数据,然后添加到下一次的访问请求头中。

例如:

import requests
url = 'https://www.baidu.com'

headers = {
  'cookie': 'PSTM=1496322685; BIDUPSID=BC36002F7DA142E6674AE290CD5A38DB; __cfduid=ddf4836dd1f1ac99eeea8ef0f140493301522406372; BAIDUID=5FA7A2B4FDDA3CECC6BE9B74FDCD00B8:FG=1; sugstore=1; BDUSS=1hvT3VoQmc5TDl5bFE1c2NjcGpOenBycnJTOEstZ0ZKcGs5UnB1dzVyU1hpYXRiQVFBQUFBJCQAAAAAAAAAAAEAAABCcYSYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJf8g1uX~INbR; BD_UPN=12314753; MCITY=-340%3A; delPer=0; BD_CK_SAM=1; PSINO=7; BDRCVFR[Dq4jqEr7erC]=mk3SLVN4HKm; H_PS_PSSID=; BDORZ=FFFB88E999055A3F8A630C64834BD6D0; H_PS_645EC=216feJgh%2BnAm%2BJD6G3sw10RBbYN1O%2FeCJqUhgtRyZ3OuJO0EOqbXUwL8Kgf8zhqXH7RWxBnn; BDSVRTM=0; ispeed_lsm=6'
}

response = requests.get(url, headers=headers)

4.Referer:这个字段用来记录浏览器上次访问的URL,有的网站会通过请求中有没有携带这个参数来判断是不是爬虫,从而确定是否限制访问。所以有时候也需要在headers中添加上这个参数。

5.User-Agent:是用来标识请求的浏览器身份的,大部分网站都会通过请求中有没有携带这个参数来判断是不是爬虫,从而确定是否限制访问。所以有时候也需要在headers中添加上这个参数。
例如:

import requests
url = 'https://www.baidu.com'
headers = {
  'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36'
}
response = requests.get(url, headers=headers)

这就是请求报文中比较常用且比较重要的5个字段,希望能够对大家去理解爬虫会有一点帮助。

猜你喜欢

转载自blog.csdn.net/weixin_41798450/article/details/88689229