Python之Requests库学习笔记

记录以备后用


方法

  • requests.request(method, url, **kwargs) // 最主要, 其他方法都是由此方法封装而来
  • requests.get(url, params=None, **kwargs) // 最常用
  • requests.head(url, **kwargs) // 只拿head
  • requests.post(url, data=None, json=None, **kwargs)
  • requests.put(url, data=None, **kwargs)
  • requests.patch(url, data=None, **kwargs)
  • requests.delete(url, **kwargs)

参数

  • params : 字典或字节序列,作为参数增加到url中

    1
    2
    3
    4
    >>> kv = {'key1': 'value1', 'key2': 'value2'}
    >>> r = requests.request('GET', 'http://python123.io/ws', params=kv)
    >>> print(r.url)
    http://python123.io/ws?key1=value1&key2=value2
  • data : 字典、字节序列或文件对象,作为Request的内容

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    >>> kv = {'key1': 'value1', 'key2': 'value2'}
    >>> r = requests.request('POST', 'http://python123.io/ws', data=kv)
    >>> print(r.text)
    { ...
    "form": {
    "key2": "value2",
    "key1": "value1"
    },
    }
    >>> body = '主体内容'
    >>> r = requests.request('POST', 'http://python123.io/ws', data=body)
    >>> print(r.text)
    { ...
    "data": "主体内容",
    "form": {},
    }
  • json : JSON格式的数据,作为Request的内容

    1
    2
    >>> kv = {'key1': 'value1'}
    >>> r = requests.request('POST', 'http://python123.io/ws', json=kv)
  • headers : 字典,HTTP定制头

    1
    2
    >>> hd = {'user‐agent': 'Chrome/10'}
    >>> r = requests.request('POST', 'http://python123.io/ws', headers=hd)
  • cookies : 字典或CookieJar,Request中的cookie

  • auth : 元组,支持HTTP认证功能

  • files : 字典类型,传输文件

    1
    2
    >>> fs = {'file': open('data.xls', 'rb')}
    >>> r = requests.request('POST', 'http://python123.io/ws', files=fs)
  • timeout : 设定超时时间,单位为秒
    1
    >>> r = requests.request('GET', 'http://www.baidu.com', timeout=10)
  • proxies : 字典类型,设定访问代理服务器,可以增加登录认证
    1
    2
    3
    >>> pxs = { 'http': 'http://user:pass@10.10.10.1:1234'
    'https': 'https://10.10.10.1:4321' }
    >>> r = requests.request('GET', 'http://www.baidu.com', proxies=pxs)
  • allow_redirects : True/False,默认为True,重定向开关
  • stream : True/False,默认为True,获取内容立即下载开关
  • verify : True/False,默认为True,认证SSL证书开关
  • cert : 本地SSL证书路径

Response对象的属性

  • r.status_code: HTTP请求的返回状态,200表示连接成功,其余表示失败
  • r.text: HTTP响应内容的字符串形式,即url对应的页面内容
  • r.encoding: 从HTTP header中猜测的响应内容编码方式
  • r.apparent_encoding: 从内容中分析出的响应内容编码方式(备选编码方式)
  • r.content: HTTP响应内容的二进制形式

异常

  • requests.ConnectionError: 网络连接错误异常,如DNS查询失败、拒绝连接等
  • requests.HTTPError: HTTP错误异常
  • requests.URLRequired: URL缺失异常
  • requests.TooManyRedirects: 超过最大重定向次数,产生重定向异常
  • requests.ConnectTimeout: 连接远程服务器超时异常
  • requests.Timeout: 请求URL超时,产生超时异常

判断异常的方法

1
2
>>> r = requests.get(url)
>>> r.raise_for_status()

r.raise_for_status(): 如果不是200,产生异常 requests.HTTPError

r.raise_for_status()在方法内部判断r.status_code是否等于200,不需要增加额外的if语句,该语句便于利用try‐except进行异常处理


爬取网页的通用代码框架

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import requests
def getHTMLText(url):
try:
r = requests.get(url,timeout = 30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
if __name__ == "__main__":
url = "https://www.baidu.com"
print(getHTMLText(url))