「关注我,和我一起放下灵魂,让灵魂去搬砖。」
作者:小一
介绍:放不下灵魂的搬砖者
Python版本3.8.0,开发工具:Pycharm
前面已经讲过如何安装并使用 requests 进行网页内容获取。但是requests 的功能可不止这些,跟我一起来看看吧
1. 获取内容
url = ‘https://movie.douban.com/top250’response = requests.get(url)# 打印响应结果的状态码、编码方式、cookie等内容print(response.status_code)print(response.encoding)print(response.cookies)
通过requests 的 get 方法获取豆瓣电影TOP 250 的响应内容,包括状态码、编码、cookie等
运行结果如下:
418None<RequestsCookieJar[]>
不对啊,我要的结果呢?还有418是个什么神仙状态码?于是机智的我赶紧 google 了一下
htcpcp1.0协议中的418的意义是:当客户端给一个茶壶发送泡咖啡的请求时,茶壶就返回一个418错误状态码,表示“我是一个茶壶”。
查完更懵了,这又是个什么神仙解释?
不管了,反正就是返回不正确。会不会是因为豆瓣对访问进行头部识别?刚好上一节也说过怎么设置头部,说搞就搞
url = ‘https://movie.douban.com/top250’headers = {‘User-Agent’: ‘Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36’,}response = requests.get(url=url, headers=headers)# 打印响应结果的状态码、编码方式、cookie等内容print(response.status_code)print(response.encoding)print(response.cookies)
返回结果如下
200utf-8<RequestsCookieJar[<Cookie bid=N_uBlMrf9mM for .douban.com/>]>
呼,果然如此,看到200不由得在心底又夸了一下自己。
上面的访问使用最基本的 get 请求,那如果我要加访问参数呢?
user_info = {‘username’: ‘yiye’, ‘passwd’: ‘zhiqiu’}response = requests.get(url=url, headers=headers, params=user_info)
什么?你说 get 请求不安全,行,那我们来试试 post 请求
user_info = {‘username’: ‘yiye’, ‘passwd’: ‘zhiqiu’}response = requests.post(url=url, headers=headers, data=user_info)
注意注意:post 请求中参数名为 data,get中为 params
当有时候我们需要传递 JSON 形式的数据时,可以使用 json.dumps() 方法对数据序列化
user_info = {‘username’: ‘yiye’, ‘passwd’: ‘xiaoyi’, ‘age’: ’18’}response = requests.post(url=url, headers=headers, data=json.dumps(user_info))
这里解释一下什么是表单数据:
当你在登录网页时,需要你填写用户名、密码、验证码等信息进行提交,这些信息会被统一放在一个表格里面,提交给服务器进行验证。
这些提交的数据称为表单数据
同样的,当我们需要上传文件时,也可以把文件放在参数中上传
upload_file = {‘file’: open(‘test.txt’, ‘rb’)}response = requests.post(url=url, files=upload_file)
2. cookie配置
咦,小一哥,你怎么又提到了 cookie ,上节不是说过了吗?
对,没错,因为 cookie 对于需要登录的网站来说,太重要了!
当你成功登录一个网站的时候,你可以将本次登录的 cookie 保存在本地,等你下一次需要再次登录的时候,直接读取你本地的 cookie 内容,而不用再次输入用户名、密码等,是不是很方便?
# 获取浏览器cookieb_cookies = response.cookies# 将cookie 保存在本地cookies = dict()for i in b_cookies: cookies[i[‘name’]] = i[‘value’]with open(“file_path”, ‘wb’) as f: f.write(pickle.dumps(cookies))
# 第二次访问直接通过cookie 访问response = requests.get(url, cookies=cookies)print(response.status_code)print(response.encoding)
3. 会话(session)
既然提到了cookie ,那 session 也不能落下吧。
这里先普及一下什么是cookie,什么是session?
答:“cookie通过在客户端记录信息确定用户身份,session通过在服务器端记录信息确定用户身份”。总之就是你访问一次人家就认识你了,第二次去的时候可能直接就给你开门了,而不需要再登陆。
cookie以文本格式存储在浏览器上,存储量有限;
而会话存储在服务端,可以无限量存储多个变量并且比cookie更安全
也就是说,我们同样可以通过 session 会话去访问部分网页,不同的是,这些网页是通过服务器端 session 信息验证用户,而不是通过本地 cookie。
# 1. 获取session session = requests.Session()# 2. 传入本地cookies content = session.get(url, cookies=cookie).textprint(content)
4. 超时配置
为防止服务器响应缓慢,导致客户端处理异常。requests请求通常利用 timeout 变量来配置最大请求时间
连接超时一般设为比 3 的倍数略大的一个数值,因为 TCP 数据包重传窗口的默认大小是 3
Timeout 类型:
- 连接超时:客户端实现到远端服务器端口的连接时 request 所等待的时间。
连接超时一般设为比 3 的倍数略大的一个数值,因为 TCP 数据包重传窗口的默认大小是 3。
- 读取超时:客户端已经连接上服务器并且发送了request后,客户端等待服务器发送请求的时间。
一般指的是服务器发送第一个字节之前的时间。
timeout 设置单一的值,将会用作 connect 和 read 二者的 timeout。
requests.get(url=url, timeout=5)
如果要分别制定,就需要传入一个元组。
requests.get(url=url, timeout=(5, 10))
5. SSL 证书验证
现在随处可见 https 开头的网站,Requests 可以为 HTTPS 请求验证 SSL 证书。
要想检查某个主机的SSL证书,你可以使用verify 参数。默认是True,表示需要验证
# 设置 verify 参数为 False,可以跳过证书验证response = requests.get(‘https://输入你的网址’, verify=False)print response.text
6. 代理
“小一哥,那什么时候会用到代理呢?”
“当然是当你要访问的网站对访问 IP 有限制的时候”
通过对任意请求方法提供 proxies 参数配置单个请求。
proxies = { “http”: “代理主机ip及端口号”, “https”: “代理主机ip及端口号”,}
# 通过requests 方法设置代理访问response = requests.get(“http://www.baidu.com/”, proxies = proxies)
以上就是关于 requests 库的一些常用方法,到现在为止,我们基本可以拿到我们想要的网页内容,或者设置访问头部、或者使用代理等
Python系列
Python系列会持续更新,从基础入门到进阶技巧,从编程语法到项目实战。若您在阅读的过程中发现文章存在错误,烦请指正,非常感谢;若您在阅读的过程中能有所收获,欢迎一起分享交流。
如果你也想和我一起学习Python,关注我吧!
学习Python,我们不只是说说而已
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试