# 这是学习廖雪峰老师 python 教程的学习笔记
相比于 Python 内置的 urllib 模块, 使用 requests 可以更好地处理 URL 资源.
1, 使用 requests
1) 通过 GET 访问一个页面
- >>> import requests
- >>> r = requests.get('https://www.douban.com/') # 豆瓣首页
- >>> r.status_code
- 200
- >>> r.text
- r.text
- '<!DOCTYPE html>\n<html>\n<head>\n<meta name="description"content=" 提供图书, 电影, 音乐唱片的推荐, 评论和...'
2) 对于带参数的 URL, 传入一个 dict 作为 params 参数:
- >>> r = requests.get('https://www.douban.com/search', params={'q': 'python', 'cat': '1001'})
- >>> r.url # 我们实际请求的 URL
- 'https://www.douban.com/search?q=python&cat=1001'
3)requests 自动检测编码, 可以使用 encoding 属性查看
- >>> r.encoding
- 'utf-8'
4) 无论响应是文本还是二进制内容, 我们都可以用 content 属性获得 bytes 对象
- >>> r.content
- b'<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv="Content-Type"content="text/html; charset=utf-8">\n...'
4) 对于特定类型的响应, 例如 JSON, 可以直接获取
- >>> r = requests.get('https://query.yahooapis.com/v1/public/yql?q=select * from weather.forecast where woeid = 2151330&format=json')
- >>> r.json()
- {'query': {'count': 1, 'created': '2017-11-17T07:14:12Z', ...
5) 需要传入 HTTP Header 时, 我们传入一个 dict 作为 headers 参数:
- >>> r = requests.get('https://www.douban.com/', headers={'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) ApplewebKit'})
- >>> r.text
- '<!DOCTYPE html>\n<html>\n<head>\n<meta charset="UTF-8">\n <title > 豆瓣 (手机版)</title>...'
6) 发送 POST 请求, 只需要把 get() 方法变成 post(), 然后传入 data 参数作为 POST 请求的数据
>>> r = requests.post('https://accounts.douban.com/login', data={'form_email': 'abc@example.com', 'form_password': '123456'})
把 post() 方法替换为 put(),delete() 等, 就可以以 PUT 或 DELETE 方式请求资源
7)requests 默认使用 application/x-www-form-urlencoded 对 POST 数据编码. 如果要传递 JSON 数据, 可以直接传入 json 参数
- params = {'key': 'value'}
- r = requests.post(url, json=params) # 内部自动序列化为 JSON
8) 上传文件需要更复杂的编码格式, 但是 requests 把它简化成 files 参数
- >>> upload_files = {'file': open('report.xls', 'rb')} #注意标示符 b, 这样获取的 bytes 长度才是文件的长度
- >>> r = requests.post(url, files=upload_files)
9) 获取响应头
- >>> r.headers
- {Content-Type':'text/html; charset=utf-8','Transfer-Encoding':'chunked','Content-Encoding':'gzip', ...}
- >>> r.headers['Content-Type']
- 'text/html; charset=utf-8'
10) 获取指定的 Cookie
- >>> cs = {'token': '12345', 'status': 'working'}
- >>> r = requests.get(url, cookies=cs)
11) 要指定超时, 传入以秒为单位的 timeout 参数
>>> r = requests.get(url, timeout=2.5) # 2.5 秒后超时
来源: http://www.bubuko.com/infodetail-2604244.html