【python爬虫专题】解析方法 <2> Requests库方法总结
2018-01-29 16:42
736 查看
Requests库是python实现的简单易用的HTTP库
写一个实例:
其中,response.text 和urllib中的 .read()方法效果是一样的
关于这几种方法的区别,可以参考网上许多博文资料:
HTTP POST GET 本质区别详解
GET,POST,PUT,DELETE的区别
http协议中:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法
如果我们要使用带有参数的GET请求的话,具有两种方式:
把传入的参数(通常是key-value型)拼接到url中,格式: url?key1=value1&key2=value2
(推荐)命名一个参数对象(字典),然后把这
4000
个对象传入requests.get()方法中的params 参数中,举个例子:
其实上面代码中,最后两行出来的结果是一样的,这里仅仅做一个”科普“。这两个方法在解析Ajex请求的时候是比较常用的。
对于获得的二进制数据,只有我们保存下来才会得到我们想要的图片、视频,保存数据的方法就比较简单:
这样就可以顺利的保存下我们想要的二进制资源了。
添加headers的方法也很简单,直接在get()方法中传入headers就可以了,不过多累述
文件上传则需要用到post方法,这里可以使用post方法中传入files参数,实现文件的上传。注意这里的files参数是一个字典。
比方说上传一张图片的话,已知本地图片的路径path和要上传的网站url:
获取cookies
这样我们就可以直观的获得我们想要的所有cookies,这样的方法比urllib容易多了,不用设置什么opener,什么handler之类的。
有了cookies,我们就可以利用它进行会话维持,模拟登陆。(常用Session()方法)
证书验证
我们在requests请求一个网站时,如果网站是一个HTTPS协议的话
,程序将默认首先检测证书是否合法,当证书不合法时,将会抛出一个SSLError。
我们可以给get()方法中的verify参数设置为False`
这样就可以避免SSL验证错误了,不过程序会报一个warning,告诉你没有验证,这里去除第二、三行的注释号‘#’ ,可以排除这个warning。
在get() 方法中还有一个cert参数,可以传递本地的证书文件,一般我们非网站开发不会用到。
设置代理
用requests库设置代理也很容易,直接创建一个dict然后作proxies参数传入get()方法就可以了。
如果代理是socks代理,那么我们需要安装requests.socks模块,然后像上述代码一样类似设置就可以啦
设置超时
用来限制服务应答的速度。直接设置get方法里面的timeout参数就好。
认证设置
遇到要登录验证的网站,则可以利用auth参数进行登录验证,传入登录用户名,密码。
也可以直接输入auth参数进行设置
错误与异常
在requests库中,常见的错误主要有 HTTPError, ConnectionError, readtimeout 等,在这里要想在try - except 中捕获异常进行处理也是相当便捷的,这里附上其官方文档的链接,方便需要时查看:
Requests库官方文档链接入口
请求
基本的GET请求:requests.get()写一个实例:
import requests response = requests.get("http://www.baidu.com") print(type(response)) print(response.status_code) print(response.text) print(type(response.text))
其中,response.text 和urllib中的 .read()方法效果是一样的
各种请求方法
常见的HTTP请求的方法如: get post put delete 等,都可以直观的调用同名的方法就可以,如:import requests url = '....' requests.get(url) requests.post(url) requests.put(url) requests.delete(url) requests.head(url) requests.options(url)
关于这几种方法的区别,可以参考网上许多博文资料:
HTTP POST GET 本质区别详解
GET,POST,PUT,DELETE的区别
http协议中:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法
GET请求
最简单的请求就是import requests url = '…………' response = requests.get(url) print(response.text)
如果我们要使用带有参数的GET请求的话,具有两种方式:
把传入的参数(通常是key-value型)拼接到url中,格式: url?key1=value1&key2=value2
(推荐)命名一个参数对象(字典),然后把这
4000
个对象传入requests.get()方法中的params 参数中,举个例子:
import requests url = "..." data = { "key1":"value1" "key2":"value2" } response = requests.get(url,params=data) print(response.text)
解析json
当我们的get请求返回的是一个json字符串,那么我们通过import json ,调用json方法可以把json字符串变成json格式的数据import requests import json url = "..." response = requests.get(url)# 假如说返回一个json字符串 print(response.json()) print(json.loads(response.text))
其实上面代码中,最后两行出来的结果是一样的,这里仅仅做一个”科普“。这两个方法在解析Ajex请求的时候是比较常用的。
获取一些二进制数据(图片,视频等等)
下载图片、视频是使用爬虫最常见的目的之一。这些都是二进制数据,在获取二进制数据的时候,我们可以调用content()方法获得二进制内容 .import requests url = '...'# 这个url是保存某张图片或视频的url response = requests.get(url) print(response.text) # 不出意外,这将打印一堆“乱码” print(response.content)# 将会打印出一堆二进制数据流bytes
对于获得的二进制数据,只有我们保存下来才会得到我们想要的图片、视频,保存数据的方法就比较简单:
with open("path/file_name",'wb') as f: f.write(response.content) f.close()
这样就可以顺利的保存下我们想要的二进制资源了。
给请求添加headers
如果不给我们的请求添加headers,我们可能会被网站管理者禁掉,或者出现服务器错误。例如像这样:500 Server Error
An internal server error occured.添加headers的方法也很简单,直接在get()方法中传入headers就可以了,不过多累述
基本的POST请求
既然是POST那就必然要传入一些数据,直接传入dict 类型的form-data就可以。import requests data = {"key1":"value1","key2":"value2"} headers = {"User-Agent":"....."} response = requests.post("url",data=data,headers=headers) print(response.json())
response属性
response属性常见的包括status_code, headers, cookies, url, history,可以自己尝试调用这些方法来实践。一些高级操作
文件上传操作:文件上传则需要用到post方法,这里可以使用post方法中传入files参数,实现文件的上传。注意这里的files参数是一个字典。
比方说上传一张图片的话,已知本地图片的路径path和要上传的网站url:
import requests files = {"files":open('path':‘rb’)} response = requests.post(url,files=files)
获取cookies
import requests response = requests.get(url) print(response.cookies)# 有可能返回的是一个cookieJar类型的cookie列表,我们可以用for循环打印出来 for key,value in response.cookies.item(): print(key + ' = ' + value)
这样我们就可以直观的获得我们想要的所有cookies,这样的方法比urllib容易多了,不用设置什么opener,什么handler之类的。
有了cookies,我们就可以利用它进行会话维持,模拟登陆。(常用Session()方法)
证书验证
我们在requests请求一个网站时,如果网站是一个HTTPS协议的话
,程序将默认首先检测证书是否合法,当证书不合法时,将会抛出一个SSLError。
我们可以给get()方法中的verify参数设置为False`
import requests # from requests.packages import urllib3 # urllib3.disable_warnings() response = requests.get(url,verify=False) print(response.status_code)
这样就可以避免SSL验证错误了,不过程序会报一个warning,告诉你没有验证,这里去除第二、三行的注释号‘#’ ,可以排除这个warning。
在get() 方法中还有一个cert参数,可以传递本地的证书文件,一般我们非网站开发不会用到。
设置代理
用requests库设置代理也很容易,直接创建一个dict然后作proxies参数传入get()方法就可以了。
import requests proxies={'http':'http://代理IP号码', 'https':'https://代理IP号码' } response = requests.get(url,proxies=proxies)
如果代理是socks代理,那么我们需要安装requests.socks模块,然后像上述代码一样类似设置就可以啦
proxies={'http':'socks5://代理IP号码', 'https':'socks5://代理IP号码' }
设置超时
用来限制服务应答的速度。直接设置get方法里面的timeout参数就好。
认证设置
遇到要登录验证的网站,则可以利用auth参数进行登录验证,传入登录用户名,密码。
import requests from requests.auth import HTTPBasicAuth r = requests.get(url,auth = HTTPBasicAuth('用户名',‘密码’)) print(r.status_code)
也可以直接输入auth参数进行设置
错误与异常
在requests库中,常见的错误主要有 HTTPError, ConnectionError, readtimeout 等,在这里要想在try - except 中捕获异常进行处理也是相当便捷的,这里附上其官方文档的链接,方便需要时查看:
Requests库官方文档链接入口
相关文章推荐
- 【python爬虫专题】解析方法 <1> Urllib库方法总结
- 【python爬虫专题】解析方法 <4> BeautifulSoup库学习
- 【python爬虫专题】解析方法 <3> 正则表达式学习
- 简单 python爬虫 <2>
- python爬虫上手 笔记<2>
- Quartz调度框架应用总结<2>--作业及其相关
- 读<<CLR via C#>>总结(2) 对象创建的原理和两种类型转换方法
- jQuery 常用方法大全<2>
- 读<<CLR via C#>>总结(7) 以传引用的方式向方法传递参数---ref&out
- Java笔记3 多线程<2>线程间通信-代码分析以及多线程常见方法的运用
- Python<2>异常基础
- Python抓取页面中超链接(URL)的三中方法比较(HTMLParser、pyquery、正则表达式) <转>
- Android学习之Bluetooth开发总结<续2>
- iOS- <项目笔记> UIApplication常见属性与方法总结
- 事件、委托、委托方法的总结(使用EventHandler<>)
- Python 正则表达式 带分组的替换 \g<1> \g<2>
- [转]asp.net 前台绑定后台变量方法总结:<%= %> 和<%# %>的区别
- 通俗讲解Makefile编写方法<2>
- python 各种解析xml包使用方法总结 - 转
- asp.net 实现省市级联-----<简单方法2>----前台实现