常用命令

基本写法

用response存储get请求来的内容。

  1. import requests #导入库
  2. response = requests.get("http://httpbin.org/get")
  3. print(response.text)

带参数的get请求 (params)

参数的名称是 params

  1. import requests
  2. data = {
  3. 'name':'germey', # 注意要有逗号
  4. 'age':22
  5. }
  6. response = requests.get("http://httpbin.org/get",params=data)
  7. #这里把包含参数的 data 赋予传参数的 params 就可以了。
  8. print(response.text)

解析json

response.json() 等同于 json.loads(response.text)

  1. import requests
  2. import json
  3. response = requests.get("http://httpbin.org/get")
  4. print(type(response.text)) # 返回 字符串样式
  5. print(response.json())
  6. print(json.loads(response.text)) #返回字典样式
  7. print(type(response.json())) #注意,response.json 后面带一个括号

获取二进制数据库

下载视频、图片等的时候常用的一种方法

  1. import requests
  2. response = requests.get("https://github.com/favicon.ico")
  3. print(type(response.text),type(response.content))
  4. print(response.text) # <class 'str'> 字符串
  5. print(response.content) #<class 'bytes'> 二进制编码

保存文件到本地

wbab 测试出来效果一样,但是为什么用wb? 先记下来吧。 favicon.ico 表示保存下来的文件名。

  1. import requests
  2. response = requests.get("https://github.com/favicon.ico")
  3. with open('favicon.ico','wb') as f:
  4. f.write(response.content)
  5. f.close()

Requests基础 - 图1

添加headers

如果不加,会被判定为爬虫,网站会拒绝请求。

  1. import requests
  2. headers = {
  3. 'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
  4. }
  5. response = requests.get("https://www.zhihu.com/explore",headers=headers)
  6. print(response.text)

基本 POST 请求

参数名称为 data, 以字典的方式传入data 就可以

  1. import requests
  2. data = {'name':'feilong','age':'22'}
  3. response = requests.post("http://httpbin.org/post",data=data)
  4. print(response.text)

响应

response 属性

  1. import requests
  2. response = requests.get('http://www.jianshu.com')
  3. print(type(response.status_code),response.status_code)
  4. print(type(response.headers),response.headers)
  5. print(type(response.cookies),response.cookies)
  6. print(type(response.url),response.url)
  7. print(type(response.history),response.history)

状态码判断

  1. import requests
  2. response = requests.get('http://www.jianshu.com')
  3. exit() if not response.status_code == requests.codes.ok else print('Request Successfully')

高级操作

文件上传

文件上传用 post 这个参数

‘file_name’ 是上传的文件名称,可以自定义

  1. import requests
  2. files = {'file_name': open('favicon.ico','rb')}
  3. response = requests.post("http://httpbin.org/post",files=files)
  4. print(response.text)

获取cookies

  1. import requests
  2. response = requests.get("https://www.baidu.com")
  3. print(response.cookies)
  4. for key,value in response.cookies.items():
  5. print(key+'='+value)

会话维持

使用 Session() 会话对象让你能够跨请求保持某些参数。它也会在同一个 Session 实例发出的所有请求之间保持 cookie

  1. import requests
  2. s = requests.Session()
  3. s.get('http://httpbin.org/cookies/set/sessioncookie/123456789')
  4. r = s.get("http://httpbin.org/cookies")
  5. print(r.text)
  6. # '{"cookies": {"sessioncookie": "123456789"}}'

证书验证

get在请求https网站前会先确定证书是否合法,如果不合法会sslerror 然后中断

  1. import requests
  2. response = requests.get('https://www.12306.cn',verify=False)
  3. print(response.status_code)

所以,在这里加一个参数 verify 就可以避免被中断
但是,它会有 ⚠️警告信息(大意:你没有验证证书,验证是有必要的)这个时候,我们可以改成下面的代码,就会消除警告。

  1. import requests
  2. from requests.packages import urllib3
  3. urllib3.disable_warnings()
  4. response = requests.get('https://www.12306.cn',verify=False)
  5. print(response.status_code)

这个时候,就只会返回状态码 200
也可指定本地的证书进行验证, 但是本地要有证书才可以。

  1. import requests
  2. response = requests.get('https://www.12306.cn',cert=('/path/server.cert','/path/key'))
  3. print(response.status_code)

代理设置

http/https 代理

  • 无密码

    1. import requests
    2. proxies = {
    3. "http":"http://127.0.0.1:9843", #这里是地址
    4. "https":"https:127.0.0.1:9023" #这里是地址
    5. }
    6. response = requests.get("https://www.taobao.com",proxies=proxies)
    7. print(response.status_code)
  • 有密码

    1. import requests
    2. proxies = {
    3. "http":"http://user:password@127.0.0.1:9843", #这里是地址加用户名和密码
    4. }
    5. response = requests.get("https://www.taobao.com",proxies=proxies)
    6. print(response.status_code)

    socks 代理

    1. import requests
    2. proxies = {
    3. 'http':'socks5://127.0.0.1:9742'
    4. 'https':'socks5://127.0.0.1:9742'
    5. }
    6. response = requests.get("https://www.taobao.com",proxies=proxies)
    7. print(response.status_code)

    超时设置

    在规定时间内没有获得应答就直接返回应答

  1. import requests
  2. from requests.exceptions import ReadTimeout
  3. try:
  4. response = requests.get("http://httpbin.org/get",timeout=0.1)
  5. print(response.status_code)
  6. except ReadTimeout:
  7. print("timeout")

首先,导入了requests, 然后从requests.exceptions 导入 ReadTimeout模块
第二,设置一个异常处理,如果成功就打印状态码 200,如果失败就打印 timeout

认证设置

  1. import requests
  2. from requests.auth import HTTPBasicAuth
  3. r = requests.get('http://zfl420.pythonanywhere.com/admin/blog/post/add/',auth=HTTPBasicAuth('zfl420','nihao52cons'))
  4. print(r.status_code)

需要用户名和密码才能访问的网站

异常处理

  1. import requests
  2. from requests.exceptions import ReadTimeout, ConnectionError,RequestException
  3. try:
  4. response = requests.get("http://httpbin.org/get",timeout=0.1)
  5. print(response.status_code)
  6. except ReadTimeout:
  7. print('timeout')
  8. except ConnectionError:
  9. print('Connection Error')
  10. except RequestException:
  11. print('Error')

可以捕捉不同的异常