Requests 库入门
Requests库的安装
打开终端,输入:
pip install requests
测试安装效果:
python
>>>import requests
>>>r = requests("http://www.baidu.com")
>>>r.status_code
200
>>>r.encoding = 'utf-8'
>>>r.text
...
Requests库的常用方法
- get
r = requests.get(url, params = None, **kwargs)
- url:拟获取页面的url;
- params:url中的额外参数,字典或字节流格式,可选
- **kwargs:12个控制访问参数(之后介绍)
- 返回一个Response对象
>>> import requests
>>> r = requests.get("http://www.baidu.com")
>>> r.status_code
200
>>> type(r)
<class 'requests.models.Response'>
>>> r.headers
{'Server': 'bfe/1.0.8.18', 'Date': 'Fri, 17 Nov 2017 07:12:31 GMT', 'Content-Type': 'text/html', 'Last-Modified': 'Mon, 23 Jan 2017 13:28:36 GMT', 'Transfer-Encoding': 'chunked', 'Connection': 'Keep-Alive', 'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Pragma': 'no-cache', 'Set-Cookie': 'BDORZ=27315; max-age=86400; domain=.baidu.com; path=/', 'Content-Encoding': 'gzip'}
Response 对象属性
- r.status_code:HTTP请求的返回状态,200表示连接成功;
- r.text:HTTP响应内容的字符串形式,即url对应的页面内容;
- r.encoding:从HTTP headerVS猜猜的响应内容的编码方式;
- r.apparent_encoding:从内容分析出的响应内容的编码方式(备选编码方式);
- r.content:HTTP响应内容的二进制形式。
异常
- requests.ConnectionError:网络连接错误异常,如DNS查询失败、拒绝连接等;
- requests.HTTPError:HTTP错误异常;
- requests.URLRequired:URL缺失异常;
- requests.TooMAnyRedirects:超过最大定向次数,产生重定向异常;
- requests.ConnectTimeout:连接远程服务器超时异常;
- requests.Timeout:请求URL超时,产生超时异常。
爬取网页的通用代码框架
import requests
def getHTMLText(url):
try:
r = requests.get(url, timeout = 30)
r.raise_for_status() # 如果状态不是200,引发HTTPError异常
return r.text
ecxept:
return "产生异常"
if _name_ == "_main_"
url = "http://www.baidu.com"
print(getHTMLText(url))
HTTP协议
- HTTP,Hypertext Transfer Protocol,超文本传输协议。HTTP是一个基于“请求与响应”模式的、无状态的应用层协议。HTTP协议采用URL作为定位网络资源的标识。
- URL格式:http://host[:port][path],host为合法的Internet主机域名或IP地址,port为端口号,缺省端口为80,path为请求资源的路径;
- URL是通过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
- HTTP协议对资源的操作:
GET:请求获取URL位置的资源;
HEAD:请求获取URL位置资源的响应消息报告,即获得该资源的头部信息;
POST:请求向URL位置的资源后附加新的数据;
PUT:请求向URL位置存储一个资源,覆盖原YURL位置的资源;
PATCH:请求局部更新URL位置的资源,即改变该处资源的部分内容;
DELETE:请求删除URL位置存储的资源。
HTTP协议与Requests常用方法一一对应
- requests.head():获取URL的头信息
>>> r = requests.head('http://httpbin.org/get')
>>> r.headers
{'Connection': 'keep-alive', 'Server': 'meinheld/0.6.1', 'Date': 'Fri, 17 Nov 2017 08:09:28 GMT', 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Credentials': 'true', 'X-Powered-By': 'Flask', 'X-Processed-Time': '0.000617980957031', 'Content-Length': '266', 'Via': '1.1 vegur'}
- requests.post():向服务器提交新增数据
>>> payload = {'key1':'value1','key2':'value2'}
>>> r = requests.post('http://httpbin.org/post', data = payload)
>>> r.text
'... "form": {\n "key1": "value1", \n "key2": "value2"\n }...' # 向URL提交一个字典,自动编码为form(表单)
>>> r = requests.post('http://httpbin.org/post', data = 'ABC')
>>> r.text
'... "data": "ABC" ...' # 向URL提交一个字符串,自动编码为data