requests库基本用法(下)

本文介绍了requests库的高级用法,包括文件上传、Cookies管理、会话维持、SSL证书验证、代理设置和身份认证。通过示例代码详细展示了如何实现这些功能,帮助读者更好地掌握requests库在实际应用中的操作。
摘要由CSDN通过智能技术生成

requests库基本用法(下)

前面讲了requests的基本用法,现在我们了解一下request库中较高级的用法。
1.文件上传
requests可以模拟提交一些数据,假如有网站需要上传文件,我们也可以利用它来实现,示例如下:

import requests

files = {'file': open('zhihu.png', 'rb')}	#当前文件夹下的图片
r = requests.post('http://httpbin.org/post', files=files)
print(r.text)

会输出包含files的响应,由于输出内容过多就不再打印。
2.Cookies
requests库可以获取和设置cookies仅需要一步就可以完成。
获取cookies示例:

import requests
r = requests.get('https://www.baidu.com')
print(r.cookies)

运行结果:

<RequestsCookieJar[<Cookie BDORZ=27315 for .baidu.com/>]>

我们调用了cookies属性成功获取了cookies,他是一个RequestsCookieJar类型。我们可以用for语句输出cookies的名称和值,实现cookies的解析。
可以在网页中复制自己的cookies来维持自己的登录状态,首先登录网站然后再复制cookies。
在这里插入图片描述
将请求头中的cookies换成自己的cookies,设置再headers里。示例:

import requests
headers = {
        'cookie': '_zap=36522fb0-f997-48f8-819d-2a49e8cb1f9d; d_c0="AFDupPWGbBCPTjG_3TfIUhnlEgcac_LzB2M=|1574941043"; _xsrf=5oB9CcipMQ0snD5xFn3x9l3dpLeOeDRb; _ga=GA1.2.701291133.1582806506; __snaker__id=fiHZ0ny73zmwq430; _9755xjdesxxd_=32; YD00517437729195%3AWM_TID=o%2ByHk8Y14rBFQREVBZrkc6s1ZRsu%2B%2Fg; YD00517437729195%3AWM_NI=mu831eQuz0Aa69aGa5qeT3o3KNIFk7HHWvsaNEqpqMpcO3jtjM2RLtaihcP6HitsYMqDHg8FzSz8%2BoZdCfC768QUcCgA%2BfPpCb2An5P%2BopKKrarzyFaK%2F93hchBTb47URlI%3D; YD00517437729195%3AWM_NIKE=9ca17ae2e6ffcda170e2e6ee8aca4f8feeaed4d64fb0b48ba7c44e838b8eabaa6da78ce5d9ea4da5aa9eaefb2af0fea7c3b92aafabf8d4b46f93abb6d1c46bf6e7afa8e43fb3bb9cd4ee39899287a7ea3d8c989997f26b8e9bbf91f447b4bd81d4e980aa93feb3cf80a3b7a884d33e8cb7bc94dc47b39c8888bb4eba8db6d9aa659abc8d87c23df6e89fb6e249a59fe587d37c81befea2ed3f94f5a191ca41b2bfbe9bfc4ea395e1dab264a1b88eb5e140f58b9e8dcc37e2a3; gdxidpyhxdE=kJ0w4svcYOuwm%2BnaIdVXWp0noefJK2QcaMD0K3q%5C56cDI7xzoEjR4N6zrQ3kOznnBWZO8SKqz9KfKtDMuqdUe8Q9qrbl%2BOXOZ%5CZoZGHVjNoNUsYQOIq%2BavNBJ4QA%2FsczhPtiDZvnq5l4Wn6owyfx6%5CmvQ%2BDO9MGvvABr%5C4%2FuerVmnMuS%3A1618396013694; captcha_session_v2="2|1:0|10:1618395729|18:captcha_session_v2|88:amxNZkJyUFptQi9maG4xSnZIcnUvWlM1MHRLcEEydHhVS0JXUnF6RzNKU3FCL2dvZ016NUNWUFdCMmNPelJKaw==|2b9aaf60e3cf464b1994e8cdc72753268c3a1d3cee65ac4cb1ce352cebde0b52"; z_c0="2|1:0|10:1618395756|4:z_c0|92:Mi4xTW9zc0RRQUFBQUFBVU82azlZWnNFQ2NBQUFDRUFsVk5iRS1lWUFDdjRhUTFlM0VUR2FxWlg4RU1Obm9GYmZVd2hn|9f47e7be25dbd213852af229b01d4201e75cb259fa718c78d7009bb188a772ba"; tst=r; Hm_lvt_98beee57fd2ef70ccdd5ca52b9740c49=1618394273,1618394293,1618395732,1618396584; Hm_lpvt_98beee57fd2ef70ccdd5ca52b9740c49=1618396584; SESSIONID=6lQdylhIAsaHBH1gznXcNFvTI6aNRKH8uyceyuVhxPO; KLBRSID=b5ffb4aa1a842930a6f64d0a8f93e9bf|1618396582|1618396579; JOID=UlEXBUPByfcgOGFxXse4aA2mh1lN_q6iSkkEEhOIs51sdCFJMmUDi0Y5Y35UcGqBt-cBuc95ZWqfw_ZZ2FOYm8g=; osd=UlkWBUnBwfYgMmF5X8eyaAWnh1NN9q-iQEkMExOCs5VtdCtJOmQDgUYxYn5ecGKAt-0Bsc55b2qXwvZT2FuZm8=',

       'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'
}
r = requests.get('https://www.zhihu.com/', headers=headers)
print(r.text)

运行结果如下:
在这里插入图片描述
出现结果说明我们登录成功。
3.会话维持
在request中,如果直接利用get或post方法的确可以做到模拟网页请求,但是其实是不同的会话,相当于打开了两个浏览器的不同界面。基于此我们引入了一个维持会话的———Session对象。不要误会其实我们维持会话不可避免的会使用cookies。
利用它我们能方便的维持一个会话。示例:

import requests

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

运行结果:

{
  "cookies": {
    "number": "123456789"
  }
}

我们成功的获取了cookies。
4.ssl证书验证
某些没有被官方CA机构认证的网站会报错,我们只需要将get请求后面加上verify参数设置为False即可。

import requests
r = requests.get('url',verify = False)
print(r.text)

5.代理设置
某些网站在你大规模爬取的时候,网站会弹出验证码,或者验证界面,甚至封禁IP,导致了一段时间内无法访问。
为了防止这样的情况发生,我们可以设置代理来解决这个问题,此时需要proxies参数,可以用如下方式设置。
示例:

import requests

proxies = {
    'http': 'http://+ip',
    'https': 'http://+ip'
}
requests.get('url', proxies=proxies)

6.身份认证
在我们访问网站时可能需要我们输入身份认证界面,我们可以使用requests自带的身份认证功能。
示例:

import requests

r= requests.get('https://passport.bilibili.com/login?from_spm_id=333.851.top_bar.login_window', auth=('username', 'password'))
print(r.status_code)

7.超时设置
直接设置超时时间就行非常简单。

import requests
r = requests.get('url',timeout=1)
print(r.text)

输入准确会返回200状态码。

想了解更多的用法可以参考官方文档:
https://docs.python-requests.org/zh_CN/latest/

文章来源于图书笔记。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值