网络请求库 requests
GET 请求
1.通过 get 访问一个页面
import requests
r=requests.get('https://www.douban.com/') #豆瓣首页
r.status_code #200
r.text
#结果:<!DOCTYPE HTML>\n<html lang="zh-cmn-Hans" class="">\n<head>\n<meta charset="UTF-8">\n<meta name="description" content="提供图书、电影、音乐唱片的推荐、评论和价格比较,以及城市独特的文化生活。...">
2. 带参数的地址
import requests
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'
r.encoding #检测编码 'utf-8'
r.content #获得 bytes 对象
#b'<!DOCTYPE html>\n<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=utf-8">\n...'
3.JSON 数据的获取请求
import requests
r=requests.get('https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20%3D%202151330&format=json')
r.json()
#{'query':{'count':1, 'created':'2017-12-14T02:35:49Z', ...}}
4.需要请求头中添加参数
import requests
r = requests.get('https://www.douban.com/', headers={'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit'})
5.指定超时
r = requests.get(url, timeout=2.5) #2.5秒后超时
6.获取响应头
r.headers #{Content-Type': 'text/html; charset=utf-8', 'Transfer-Encoding': 'chunked', 'Content-Encoding': 'gzip', ...}
r.headers['Content-Type'] #'text/html; charset=utf-8'
7.获取指定的 cookie
r.cookies['ts'] #example_cookie_12345'
8.请求中传入 cookies 参数
cs={'token':'12345', 'status':'working'}
r=requests.get(url, cookies=cs)
POST请求
1.发送 post 请求
data 参数作为 post 请求的数据
import requests
r = requests.post('https://accounts.douban.com/login', data={'form_email':'abc@example.com', 'form_password':'123456'})
requests
默认使用application/x-www-form-urlencoded
编码。要传递json
数据可以使用以下形式:
import requests
params = {'key':'value'}
r= requests.post(url, json=params) #内部自动序列化为 JSON
2.上传文件,读文件时,用’rb’形式
import requests
upload_files = {'file':open('report.xls', 'rb')}
r = requests.post(url, files=upload_files)
把
post()
方法替换为put()
,delete()
等,就可以以PUT
或DELETE
方式请求资源。