requests
包用于获取网站的内容,使用HTTP协议,基于urllib3
实现。其官方中文文档为:Requests: HTTP for Humans
requests
的基本使用方法很简单,这里记录一些最常用的方法,完整的介绍见其官方文档,以下介绍基于Python 3.5。
使用requests
首先需要导入它:
1 | import requests |
发送请求
最基本的方法是GET
请求:
1 | url = 'http://www.zju.edu.cn/' |
返回的r
是一个Response
类对象,包含所有返回数据,可以从这个Response
中提取所需的信息。
除了get()
外,常用的请求还有post()
,用法完全相同。除此之外requests
也支持其它各种请求方法,具体参见其文档说明。
可通过r.url()
获取请求的URL。
读取响应内容
使用Response
的text
属性即可:
1 | r = requests.get(url) |
text
属性是针对相应内容是文本(如HTML等)的情况下使用,如果返回的数据是二进制数据(如图片等),则通过content
属性来读取二进制比特流:
1 | r = requests.get(url) |
如果返回的数据是json,requests
中自带了一个解析器,可以直接使用json()
函数进行解析,返回的是一个字典:
1 | url = 'http://ip.taobao.com/service/getIpInfo.php' |
上面这个例子演示了淘宝的IP查询服务。
附加查询参数
可以构造类似http://www.baidu.com/s?ie=utf-8&wd=Python
这样的查询URL,其中附加在?
之后的部分就是查询参数,可以手动构造这样一个字符串,不过requests
中提供了更优雅的解决方案,使用一个字典作为params
参数即可:
1 | url = 'http://www.baidu.com/s' |
附加表单
与附加查询参数类似,在POST
请求中,可以附加表单信息,这一般用于实现登录或提交信息等,使用一个字典作为data
参数即可:
1 | payload = {'username':'username', 'password':'passwd'} |
读取与设置响应数据的编码
一般情况下requests
均能从响应头部获得正确的编码,不过若头部没有相应信息,则需要手动设置,不然可能会出错。使用Response
的encoding
属性即可:
1 | r = requests.get() |
使用代理
使用一个字典作为proxies
参数即可,下面这段代码演示了使用ShadowSocks作为代理的方法:
1 | proxies = { |
获取响应状态码
使用Response
的status_code
属性即可:
1 | r = requests.get(url) |
自定义请求头部
传递一个字典作为headers
参数即可:
1 | header = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36'} |
会话
会话可以跨请求保持某些参数,它也会在同一个Session实例发出的所有请求之间保持cookies。使用如下方法新建一个会话:
1 | s = requests.Session() |
会话对象s
具有主要的Requests API的所有方法。会话一般用于连续发起一系列请求的时候使用,它会自动处理cookies的问题,十分方便。
相关文章:
Python爬虫–使用BeautifulSoup解析HTML
Python爬虫–使用re正则表达式解析文本