requests 返回的cookies为空_爬虫学习(2)(requests库)
POST请求
import requestsdata = {'name': 'cxc', 'age': 18}
r = requests.post("http://httpbin.org/post", data=data)
print(r.text)
这样就成功地获得了返回结果,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)
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)
这里调用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)
返回的结果里面包含了登录后的结果,就证明登陆成功了。
3.会话维持
在requests中,当我们使用post()和get()时我们时打开了两个浏览器,当我们用post()打开页面时,再用get()去请求个人信息时会失败。
新的方法——Session对象
用旧方法两次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)
现在我们就可以获得当前的cookies了。
4.SSL证书验证
requests提供了证书验证功能,当发送HTTP请求时,会检查SSL证书,可以使用verify参数控制是否检查证书。
import requestsresponse = requests.get('https://www.12306.cn', verify=False)
print(response.status_code)
这时会打印出请求成功的状态码,但会报一个警告,建议我们给他指定的证书,可以通过设置忽略警告来屏蔽它。
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 网络爬虫开发实战》
requests 返回的cookies为空_爬虫学习(2)(requests库)相关推荐
- requests 返回的cookies为空_Requests库(七)重定向和超时
由于微信公众号推送改为了信息流的形式,防止走丢,请给加个星标 ⭐,你就可以第一时间接收到本公众号的推送! Requests库分享系列: Requests库(一) Requests库(二) Reques ...
- 网络爬虫学习3 - Requests库的七个主要方法、安全性问题与异常处理、反爬虫和Robots协议
网络爬虫MOOC学习打卡 - 第三天 文章目录 网络爬虫MOOC学习打卡 - 第三天 一.Requests库主要方法解析 0.Requests库的七个主要方法 1.request()方法request ...
- python 安居客 爬虫_爬虫学习6:爬取安居客的VR房源信息
公司的VR产品在推广前夕,需要做一个较详细的市场分析报告,我们可以从下面几个步骤来深入探讨: 1.需要展望整个VR的市场规模有多大,从而论证我们需要面对的市场分量, 2.在这个大市场下面,我们面对的细 ...
- python爬虫教程资源_爬虫学习资源整理
啊,好久没写东西了,发现收到了好多人的私信,我只要有时间都一一回复了,虽说不一定有用,但权当我们互相交流啊,互相学习呀. 最近一篇<我分析了42万字歌词后,终于搞清楚民谣歌手唱什么了>文章 ...
- 爬虫学习笔记---BeautifulSoup4库的使用
本文目录 使用范例 常用的对象--Tag 常用的对象–NavigableString 常用的对象–BeautifulSoup 常用的对象–Comment 对文档树的遍历 tag中包含多个字符串的情况 ...
- python的库怎么学习_怎样学习一个Python 库 ?
什么是Python 库? python 自称是带电池的语言,在于其拥有大量的库,每个库都是某一行业比较顶尖的人才开发出来完成某一任务的代码集合.库提供一套解决方案,要用Python几乎离不开对几个库的 ...
- wpf esc key 检测不到_爬虫笔记之requests检测网站编码方式(zozo.jp)(碎碎念) - CC11001100...
发现有些网站的编码方式比较特殊,使用requests直接请求拿是得不到正确的文本的,比如这个网站: 当使用requests访问网站,使用方式取响应文本的时候,会发现得到的是奇怪的内容: #!/usr/ ...
- python爬虫技术路线_爬虫学习——中国大学最好排名(技术路线:requests库和bs4)(来源于北理工Python网络爬虫与信息提取网络公开课)...
"中国大学排名"定向爬虫示例 课程地址:http://open.163.com/movie/2019/5/G/6/MEEMCM1NP_MEEU3UFG6.html #功能描述: # ...
- 爬虫学习5——requests进阶(cookie登录、防盗链、
目录 cookies登录 方法一:在提出申请时指定cookie 方法二:使用session,给出登陆的网站和账户密码,后续使用session提出网站申请 防盗链:就是网站的溯源,当前本次请求的上一级是 ...
最新文章
- 再见,备份——你好,真正的数据保护
- Js让静态人物动起来Demo演示
- 【c基础】之 文件及其操作
- 腾讯首个软硬件全自研的机器狗 Max 来了!
- es查询大文本效率_进一步提高Elasticsearch的检索效率
- 【Emit基础】如何发射foreach代码?
- 中兴通讯、江苏联通联合成立5G消息开放实验室
- configServer的高可用
- mysql datapump_mysqlpump - 一个数据库备份程序
- fcpx教程,如何在 final cut pro 中导出视频的图文?
- OpenCV_Find Basis F-Matrix and computeCorrespondEpilines(获取一对图像的基础矩阵及对应极线)
- 0018-大数据售前的中年危机
- 软件工程(2019)第四次作业
- 【NOI2012】骑行川藏
- 学c语言推荐哪种笔记本电脑,哪款笔记本适合大学生 推荐学生党笔记本电脑
- NTFS下的USN日志文件
- [QNX 自适应分区用户指南]12 APS开发实践
- 27个机器学习图表,帮你作弊一般飞速成长!
- AMD AOCC安装
- ElasticSearch重启失败的解决方案
热门文章
- stackexchange.mysql_.net core使用redis基于StackExchange.Redis
- linux服务器运维操作命令,Windows和Linux系统服务器运维基本操作指令
- 命令行参数怎么输入_太好用了!谷歌开源的命令行接口工具fire
- java开发项目实例_Alibaba内部出品Java突击手册,大量开发实战项目分享
- php 正则匹配静态资源,Struts2 配置静态资源文件不经过Strut处理(正则匹配)
- date js 半年_js Date 日期使用上的一个坑
- ireport参数传递json_Json传递数据两种方式(json大全)
- pytorch报错RuntimeError: error in LoadLibraryA
- 李航《统计学习方法》---感知机
- Python 操作 Elasticsearch 实现 增 删 改 查