requests 返回的cookies为空_爬虫学习(2)(requests库)

POST请求

import requestsdata = {'name': 'cxc', 'age': 18}
r = requests.post("http://httpbin.org/post", data=data)
print(r.text)

fa13dc09ebe15b7befb38ccbaa8cf1d5.png
POST请求

这样就成功地获得了返回结果,form部分就是提交的数据,证明POST请求成功发送了。

响应

之前我们使用了text和content来获得响应的内容。除此之外我们还可以用其他方法来获得类似状态码,响应头,Cookies等。

import requestsr = requests.get("http://www.jianshu.com")
print(type(r.status_code), r.status_code)
print(type(r.headers), r.headers)
print(type(r.cookies), r.cookies)
print(type(r.url), r.url)
print((type(r.history)), r.history)

0dc87d8915fab4faa3b69abab2dac4ee.png
响应

status_code得到响应码,headers得到响应头,cookies得到Cookies,url得到URL,history得到请求历史。


高级用法

1.文件上传

import requestsfiles = {'file': open('favicon.ico', 'rb')}
r = requests.post("http://httpbin.org/post", files=files)
print(r.text)

这样就可以上传图标到网站,会返回file字段。

2.Cookies

import requestsr = requests.get('https://www.baidu.com')
print(r.cookies)
for key, value in r.cookies.items():print(key + '=' + value)

dd8c4b0c877882fbe0f04e3532bc3526.png
Cookies

这里调用cookies属性即可获得Cookies,它是一个RequestCookieJar类型。可以用items()方法来将其转化为元组组成的列表,来输出每个Cookie的名称和值。

以知乎为例,打开开发者工具,复制headers中的cookie。在headers里设置cookie。

import requestsheaders = {'Cookie': '''_zap=c9f7b39e-9cdf-4711-b609-5b144de76c06;d_c0="ANDsYo2hHBCPTtUZ9OAejUIO3cPeBA2-58c=|1569579305"; __utma=155987696.795654319.1573700494.1573700494.1573700494.1;__utmz=155987696.1573700494.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); _ga=GA1.2.795654319.1573700494; _xsrf=nYGEgZG2TzVwoXUaFG8g1QeZ6540lwjv; _gid=GA1.2.2132724163.1587571856; capsion_ticket="2|1:0|10:1587571858|14:capsion_ticket|44:MGY1ZTE0ZTRkZDZlNDQ0MDlhYzFkMmJhMGZlZjM0ODY=|88d210cfef5b28bae92224d8de1db6ec228d8dc10a9b05a289d6d55643003727"; l_n_c=1; r_cap_id="YjgyMWMzMzgxMmRhNGJkMzg5MzJmYTZhOWVlZjgwODE=|1587571863|67548daa6da1bae647ac06049e3d1cd9b94d516a"; cap_id="ODE1NTEzNWZkMmQxNDdlMzhlZWMwMGNhYTUyYjhiNTg=|1587571863|193a26bd8d0e7594706d33da0da505b781f369cb"; l_cap_id="NjBiNzJjMTMwY2I3NGQwY2I0NTY4MjFjNDQ4MDcwM2E=|1587571863|b7b7c5463efeb9f5618593e73a710a7d64a2ff13"; n_c=1; z_c0=Mi4xeEItekJ3QUFBQUFBME94aWphRWNFQmNBQUFCaEFsVk4xYnFOWHdDZ3lWWHYwc3RUb3dKQ24yaUNlZE8zWjJ5akhB|1587571925|394733fa0f1887f584327e807eabc779c2c7b18b; tst=r; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1587008375,1587482507,1587571858,1587605776; q_c1=cd8e859bd3664b63acb02dd3e5bfb29c|1587605777000|1570587075000; _gat_gtag_UA_149949619_1=1; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1587612593; SESSIONID=aFLEvMRLqeRKvTfgwkfxy61SHi9vWB7J2UUu5ei9q63; KLBRSID=d1f07ca9b929274b65d830a00cbd719a|1587612596|1587605301; JOID=UF8RAklay1wn2rUUYVleQRfF7zh2Po4VYaz9RSgrqw1pr-F3BejG-3rfsxJn3GTATrMuKSiE-BOqn0XDIf-qOzk=; osd=V10TBU5dyV4g3bIWY15ZRhXH6D9xPIwSZqv_Ry8srA9rqOZwB-rB_H3dsRVg22bCSbQpKyqD_xSonULEJv2oPD4=''','Host': 'www.zhihu.com','User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3",
}
r = requests.get('https://www.zhihu.com', headers=headers)
print(r.text)

d58056aa5ae3367ad429fa0c47f34517.png
cookies

返回的结果里面包含了登录后的结果,就证明登陆成功了。

3.会话维持

在requests中,当我们使用post()和get()时我们时打开了两个浏览器,当我们用post()打开页面时,再用get()去请求个人信息时会失败。

新的方法——Session对象

用旧方法两次get()的结果会得到如下

e47b71cd0dd9d6f9f1391b9c504a52a7.png
两次get()

当我们引入Session对象时

import requestss = requests.Session()
s.get("http://httpbin.org/cookies/set/number/123456789")
r = s.get('http://httpbin.org/cookies')
print(r.text)

581f2f2569b8f20443e93043ea53127e.png
Session对象

现在我们就可以获得当前的cookies了。

4.SSL证书验证

requests提供了证书验证功能,当发送HTTP请求时,会检查SSL证书,可以使用verify参数控制是否检查证书。

import requestsresponse = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)

b12aebe89549393adf60280b2e56b731.png
SSL证书

这时会打印出请求成功的状态码,但会报一个警告,建议我们给他指定的证书,可以通过设置忽略警告来屏蔽它。

import requests
from requests.packages import urllib3urllib3.disable_warnings()
response = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)

5.代理设置

对于某些网站当我们开始大规模爬取时,可能会弹出验证码或者返回登陆页,甚至会封禁IP。为了防止这种情况发生,我们可以用代理来解决问题,需要使用到proxies参数来实现。

import requestsproxies = {"http": "http://10.10.1.10:3128","https": "http://10.10.1.10:1080",
}
r = requests.get("http://www.taobao.com", proxies=proxies)
print(r.text)

代理换成自己的有效代理即可。

若代理需要使用HTTP Basic Auth,可以使用类似http://user:password@host:port 这样的语法来设置代理。

requests同时支持SOCKS协议的代理,需要安装socks库。

6.超时设置

使用timeout参数设置。

import requestsr = requests.get("https://www.taobao.com", timeout=1)
print(r.status_code)

请求分为两个阶段,connect和read,我们可以分别指定时间——timeout=(5,10,30)。如果不设置的话可以timeout=None或者不加参数。

7.身份认证

import requests
from requests.auth import HTTPBasicAuthr = requests.get("http://localhost:5000", auth=HTTPBasicAuth('username', 'password'))
print(r.status_code)

如果使用OAuth认证需安装oanth库。

8.Prepared Request

我们可以将请求表示为数据结构,其中各个参数都可以通过一个Request对象来表示。

from requests import Request,Sessionurl = 'http://httpbin.org/post'
data = {'name': 'cxc'
}
headers = {'User-Agent': "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1063.0 Safari/536.3"
}
s = Session()
req = Request('POST', url, data=data, headers=headers)
prepped = s.prepare_request(req)
r = s.send(prepped)
print(r.text)

我们引入Request,用url,headers,data参数构造了一个Request对象,再调用Session的prepare_request()将其转化为一个Prepared Request对象,再调用send()方法发送即可。

我们把请求当作独立的对象来看待,这样再进行队列调度时会非常方便。

参考书籍:《Python 3 网络爬虫开发实战》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/505338.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络 --- 数据链路层介质访问控制

引言 传输数据使用的两种链路: 点对点链路:两个相邻的节点通过一个链路相连,没有第三者。应用:PPP协议,常用于广域网。广播式链路:所有主机共享通信介质。应用:早期的总线以太网,无…

6-7 使用函数输出水仙花数_学习C语言居然对printf函数不理解???

对于C语言的printf函数,可以说是我们学习C语言第一个接触到的函数了。printf命令的作用是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。printf()函数的调用格式为:printf("", )。printf()是C语言标准库函数&#xff…

matplotlib 子图超过4个_Matplotlib从入门到精通

Matplotlib从入门到精通​mp.weixin.qq.comMatplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包。它提供了一整套和 matlab 相似的命令 API,十分适合交互式地进行制图。而且也可以方便地将它作为绘图控件,嵌入 GUI 应用程序…

c++求n的几次方_14.八年级数学:若a+b+c=1,怎么求 a+b+c的值?分式培优拓展

欢迎您来到方老师数学课堂,请点击上方蓝色字体,关注方老师数学课堂。所有的视频内容,全部免费,请大家放心关注,放心订阅。八年级数学:若abc1,怎么求 abc的值?分式培优拓展。这道题&a…

计算机网络 --- 数据链路层CSMA/CD协议

CSMA/CD协议 全称为载波监听多点接入/碰撞检测CSMA/CD(carrier sense multiple access with collision detection) CSMA/CD协议 - CS: CS指的是载波侦听/监听,每一个站点再发送数据之前以及发送数据时都要检测一下总线上是否有其他计算机在…

map insert异常失败_处理dubbo反序列化失败的坑

前言今天下午,当我经过一个小时的奋”键“疾”码“,准备好好的审查一下(摸鱼)自己写的代码,经过一段时间审查(摸的差不多了,该下班了),得出一个结论我写的代码很优雅、精简。所以大手一挥提交代码,并在 API…

class会不会回收?用不到的class怎么回收_牛X的java程序员必备的GC基础知识, 面试肯定用的到...

1. GC回收哪些内存区域呢?堆内存对象数组方法区该类所有的额实例都已经被回收, 也就是java堆中不存在该类的任何实例加载该类的ClassLoader已经被回收该类对应的java.lang.Class对象在任何地方没有被引用, 也无法通过反射访问该类方法。垃圾回…

c++读取utf8文件_Node.js 进阶之 fs 文件模块学习

前言文件操作是开发过程中并不可少的一部分。Node.js 中的 fs 模块是文件操作的封装,它提供了文件读取、写入、更名、删除、遍历目录、链接等 POSIX 文件系统操作。与其它模块不同的是,fs 模块中所有的操作都提供了异步和同步的两个版本,具有 sync 后缀的…

计算机网络 --- 数据链路层中局域网和广域网

局域网 简称LAN(Local Area Network):是指在某一区域内由多台计算机互联成的计算机组,使用广播信道。 局域网的特点 覆盖的地理范围较小,只在一个相对独立的局部范围内联,如一座或集中的建筑群内。使用专…

python制作中文词云_Python如何生成词云(详解)

前言 今天教大家用wrodcloud模块来生成词云,我读取了一篇小说并生成了词云,先看一下效果图: 效果图一:效果图二:根据效果图分析的还是比较准确的,小说中的主人公就是“程理”,所以出现次数最多。…

计算机网络 --- 局域网中的以太网

以太网概述 以太网是应用最广泛的局域网,包括标准以太网(10Mbps),快速以太网(1000Mbps),千兆以太网(1000Mbps)和10G以太网,他们都符合IEEE802.3系列标准规范…

高度为5的3阶b树含有的关键字个数_数据结构要考得好,你心里要有B树

01知识框架02知识点详解1B树①定义与性质B树也叫B-树。B树是一种平衡的多分树,通常我们说m阶的B树,是二叉排序树的一种扩展,它必须满足如下条件:01每个结点最多只有m-1个关键字。02根结点最少可以只有1个关键字。03非根结点至少有…

计算机网络 --- 网络层路由算法与路由协议

路由表: 最佳路由: “最佳”只能是相对于某一种特定要求下得出的较为合理的选择而已。 路由算法的分类 静态路由算法(非自适应路由算法) 管理员手工配置路由信息。简便,可靠,在负荷稳定,拓扑…

cplex安装_Excel软件规划求解工具的安装与功能介绍

引言规划求解工具是Excel软件中自带的一个功能非常强大的加载项/工具。它能够完成包括线性规划、整数线性规划等一般规模的数学优化问题的问题求解。更重要的是,无论是在Windows操作系统下,还是苹果电脑Mac平台下,这个工具都是免费的。下面就…

计算机网络 --- 网络层IP数据报

IP数据报格式 首部 版本:IPv4/IPv6首部长度:单位是4B,最小为5。也就是说如果首部长度的四个bit的出来的数是8,那么首部长度就是8 * 4B 32B也就是32字节区分服务:指示期望获得哪种类型的服务总长度:首部数据…

线程管理(学习)

线程管理 在日常生活中,我们要完成一个大任务,一般会将它分解成多个简单、容易解决的小问题,小问题逐个被解决,大问题也就随之解决了。 在多线程操作系统中,也同样需要开发人员把一个复杂的应用分解成多个小的、可调…

imread函数_MATLAB图像处理:27:使用imtranslate函数平移图像

本示例说明如何使用imtranslate函数对图像执行平移操作。平移操作将图像在x或y方向或两者上移动指定数量的像素。将图像读入工作区。I imread(cameraman.tif);显示图像。图像的大小为256 x 256像素。默认情况下,imshow显示图像的左上角坐标为(0,0&#…

计算机网络 --- 网络层IP地址

全世界唯一的32位/4字节标识符&#xff0c;标识路由器主机的接口。 IP地址&#xff1a;&#xff1a; {<网络号><主机号>} IP编址的历史阶段 分类的IP地址子网的划分构成超网&#xff08;无分类编址方法&#xff09; 分类的IP地址 特殊IP地址 私有IP地址 网络地址…

3测试图片显示置信度_云上的移动性能测试平台

1. 功能决定现在&#xff0c;性能决定未来性能测试在移动测试领域一直是一个大难题&#xff0c;它最直观的表现是用户在前台使用 App 时的主观体验&#xff0c;然而决定体验优劣的背后&#xff0c;涉及到了许许多多的技术变迁。当我们习惯于诺基亚时&#xff0c;智能机出现了&a…

计算机网络 --- 网络层重要协议

动态IP分配协议 --- DHCP协议 主机如何获得IP地址&#xff1a; 静态配置 包括IP地址&#xff0c;子网掩码&#xff0c;默认网关 动态配置 由DHCP服务器来分配 DHCP协议&#xff1a; 动态主机配置协议DHCP是应用层协议&#xff0c;使用客户、服务器方式&#xff0c;客户端和…