栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python爬虫 - headers和cookies的使用,以及对请求回的GET或POST网页状态的影响区别以及常见网页状态码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python爬虫 - headers和cookies的使用,以及对请求回的GET或POST网页状态的影响区别以及常见网页状态码

        主要内容:request中的headers和cookies的作用、如何设置headers或者cookies、什么时候可以不加cookies、GET或POST请求的区别、网页对请求的判断以及常见的网页状态码

目录

前提带入

李明借钱记

网络请求

headers & cookies

实例

找到headers

找到cookies

区分网页请求GET or POST

GET请求添加headers & cookies

headers

cookies

POST请求添加headers & cookies

headers

cookies

网页返回状态码

200

非200


前提带入

        首先通过一个小故事,理解一下网络请求过程中headers和cookies的作用吧

李明借钱记

        村子里有一个懒汉李明,今天突然想借点钱出去下馆子,于是他想到了隔壁的大地主,写了一封信从窗户递到了地主家,村落布局如下:

        地主收到信一看,虽然没有署名,但从这个方向来只能是李明了,李明这个人好吃懒做,不一定能还上自己的钱,不行,不借!

         李明收到了回复,不借给自己钱,也明白了问题所在,自己信誉不好,地主不愿意借钱给自己,于是李明想借用一下法官的信誉:

         地主一看,我这边是法官呀,这消息是法官发来的,法官在村子里口碑不错,人也仗义,这个钱,我借!我还从这个窗户给他:

         李明借用法官的名头,拿到了钱,时间久了,藏不住呀,终于被地主和法官发现了,于是他们约定,如果法官要向地主借钱,还要加上署名,我是法官,我在什么时间之前跟你借过钱,我们的暗号是巴拉巴拉,这样下一次就尴尬了:

         这时候李明想要借钱,除了自己说自己是法官,还要拿出一定的凭据来证明,比如我们上一次见面时什么时候,我们上一次借钱还钱是什么时候,而这些,李明是不知道的。就这样,村子的安全体系得到加强,效率也高了起来,只是李明再也不能通过歪心思借到钱了。

        除非。。。

网络请求

        除非法官是自己人,怎么说呢,网站是欢迎真人访问的,这会提高网站的流量和热度等等,但是网站不欢迎机器人,机器人做的事情对于网站来说是无利可图的。大家应该已经猜到了,这个机器人就是我们的爬虫,而这个借用法官的名声就是headers;后面的那些法官凭证就是网站为了安全设置的cookies。

        那么法官是谁呢?当然就是我们自己啦,我自己访问一次网站,我作为真人我的headers和cookies我自愿告诉我的爬虫系统,他比李明就要幸运多了吧。

headers & cookies

实例

每一个页面访问,实际上都是我们在请求(resquest)对方给我们返回一个整体,上代码看示范:

url = 'https://bilibili.com/'

res = requests.get(url)
print(res.request)
print(res)
print(res.cookies)
print(res.headers)

我向目标网址发出了请求,想要从收到的返回值看我的请求,整体对象,cookies和headers

结果如下图:

找到headers

这时我们随便点击一个网页,找到开发者工具:

 在开发者工具里,我们可以查看到请求头的信息:


 

找到cookies

还是在同样的开发者工具中,找到cookies:

区分网页请求GET or POST

GET,请求指定的页面信息,并返回实体主体。

POST,向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据是全部被包含在请求体当中了。

get方法的特点:

get是主动缓存的,它具有安全性、幂等性

post方法的特点:

当然啦,对于我们爬虫来说,这些概念并不重要,重要的是:

请求不同,信息的传递方式也不同,尤其是cookies。

GET请求添加headers & cookies

headers

我们可以把它用字典(dist)类型,存在我们的代码里:

headers = {
        "referer": "https://www.baidu.com.com/",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
    }

在下一次请求时,我们的代码增加headers:

headers = {
        "referer": "https://www.baidu.com.com/",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
    }

url = 'https://bilibili.com/'

res = requests.get(url, headers=headers) #伪装请求头
print(res.request)
print(res)
print(res.cookies)
print(res.headers)

返回结果:

cookies

对于get请求的cookies,通常可以直接包含在headers中:

headers = {
        "referer": "https://www.baidu.com.com/",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36",
        "cookie" : '在这里放上cookie' #----加在这里----#
    }

url = 'https://bilibili.com/'

res = requests.get(url, headers=headers) #headers中包括了cookie信息
print(res.request)
print(res)
print(res.cookies)
print(res.headers)

POST请求添加headers & cookies headers

 我们同样也是把它用字典(dist)类型,存在我们的代码里:

headers = {
        "referer": "https://www.baidu.com.com/",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
    }

在下一次请求时,我们的代码增加headers,同时get变为post:

headers = {
        "referer": "https://www.baidu.com.com/",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
    }

url = 'https://bilibili.com/'

res = requests.post(url, headers=headers) #伪装请求头,现在是post方法了!request.post()
print(res.request)
print(res)
print(res.cookies)
print(res.headers)
cookies

对于post请求来说,cookies是一个和headers同等地位的参数,所以单独存储使用:

headers = {
        "referer": "https://www.baidu.com.com/",
        "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36",
    }

cookie = '在这里放上cookie'

url = 'https://bilibili.com/'

res = requests.get(url, headers=headers, cookies=cookie) #headers和cookies分别传入
print(res.request)
print(res)
print(res.cookies)
print(res.headers)

网页返回状态码

200

正常的网页当然是返回200啦:

非200

也有可能返回一些 不是200的状态码,注意!非200的状态也有可能可以访问,只是大部分非200的状态代表了异常,拒绝了你的访问请求。

常见网页状态码
状态码Status Code是否能访问含义
200可以访问

(成功)

服务器已成功处理了请求。 通常,这表示服务器提供了请求的网页。

202可以访问

(已接受)

服务器已接受请求,但尚未处理。

203可以访问

(非授权信息)

服务器已成功处理了请求,但返回的信息可能来自另一来源。

300无法访问

(多种选择)

针对请求,服务器可执行多种操作。 服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。

301无法访问

(永久移动)

请求的网页已永久移动到新位置。 服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。

302无法访问

(临时移动)

服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。

400无法访问

(错误请求)

服务器不理解请求的语法。

401无法访问

(未授权)

请求要求身份验证。 对于需要登录的网页,服务器可能返回此响应。

403无法访问

(禁止)

服务器拒绝请求。

404无法访问

(未找到)

服务器找不到请求的网页。

406无法访问

(不接受)

无法使用请求的内容特性响应请求的网页。

500无法访问

(服务器内部错误)

服务器遇到错误,无法完成请求。

502无法访问

(错误网关)

服务器作为网关或代理,从上游服务器收到无效响应。

503无法访问

(服务不可用)

服务器目前无法使用(由于超载或停机维护)。 一般只是暂时状态。

 当出现401、403这些状态的时候,就去检查你的headers或者cookies吧。

原创不易,转载标明出处。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/957847.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号