Requests库:
可自动爬取HTML页面,自动网络请求提交
Requests库的安装:
以管理员身份运行cmd,执行
pip install requests
Requests库的七个主要方法:
requests.request()
方法说明:
构造一个请求,以下几个方法是在request()方法的基础上进行的再集成
使用方法:
requests.request(method, url, **kwargs)
参数说明:
- method:请求方式,对应get/put/post等7种
r = requests.request('GET', url, **kwargs)
r = requests.request('HEAD', url, **kwargs)
r = requests.request('POST', url, **kwargs)
r = requests.request('PUT', url, **kwargs)
r = requests.request('PATCH', url, **kwargs)
r = requests.request('delete', url, **kwargs)
r = requests.request('OPTIONS', url, **kwargs)
- url:拟获取页面的url链接
- **kwargs:13个控制访问参数,均为可选项(以下几种方法的可选参数皆相同)
params : 字典或字节序列,作为参数增加到url中
kv = {'key1': 'value1', 'key2': 'value2'}
r = requests.request('GET', 'http://python123.io/ws', params=kv)
# 此时 r.url = 'http://python123.io/ws?key1=value1&key2=value2'
data : 字典、字节序列或文件对象,作为Request的内容
kv = {'key1': 'value1', 'key2': 'value2'}
r = requests.request('POST', 'http://python123.io/ws', data=kv)
body = '主体内容'
r = requests.request('POST', 'http://python123.io/ws', data=body)
json : JSON格式的数据,作为Request的内容
kv = {'key1': 'value1'}
r = requests.request('POST', 'http://python123.io/ws', json=kv)
headers : 字典,HTTP定制头
hd = {'user‐agent': 'Chrome/10'}
r = requests.request('POST', 'http://python123.io/ws', headers=hd)
cookies : 字典或CookieJar,Request中的cookie
auth : 元组,支持HTTP认证功能
files : 字典类型,传输文件
fs = {'file': open('data.xls', 'rb')}
r = requests.request('POST', 'http://python123.io/ws', files=fs)
timeout : 设定超时时间,秒为单位
r = requests.request('GET', 'http://www.baidu.com', timeout=10)
proxies : 字典类型,设定访问代理服务器,可以增加登录认证 (影响自己的源IP地址)
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证书路径
requests.get()
方法说明:
获取HTML网页的主要方法,对应于HTTP的GET,请求获取URL位置的资源
使用方法:
requests.get(url, params=None, **kwargs)
参数说明:
- url:拟获取页面的url链接
- params:url中的额外参数,字典或字节流格式
- **kwargs:12个控制访问参数
requests.head()
方法说明:
获取HTML网页头信息的方法,对应于HTTP的HEAD,请求获取URL位置资源的响应消息报告,即获得该资源的头部信息
使用方法:
requests.head(url, **kwargs)
参数说明:
- url:拟获取页面的url链接
- **kwargs:12个控制访问参数
使用示例:
r = requests.head('http://httpbin.org/get')
print(r.headers)
{'Content‐Length': '238', 'Access‐Control‐Allow‐Origin': '*', 'Access‐
Control‐Allow‐Credentials': 'true', 'Content‐Type':
'application/json', 'Server': 'nginx', 'Connection': 'keep‐alive',
'Date': 'Sat, 18 Feb 2017 12:07:44 GMT'}
print(r.text)
''
requests.post()
方法说明:
向HTML网页提交POST请求的方法,对应于HTTP的POST,请求向URL位置的资源后附加新的数据
使用方法:
requests.post(url, data=None, json=None, **kwargs)
参数说明:
- url:拟更新页面的url链接
- data:字典、字节序列或文件,Request的内容
- json:JSON格式的数据,Request的内容
- **kwargs:10个控制访问参数
使用示例1:向URL POST一个字典,会自动编码为form(表单)
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.post('http://httpbin.org/post', data = payload)
print(r.text)
{ ...
"form": {
"key2": "value2",
"key1": "value1"
},
}
使用示例2:向URL POST一个字符串,会自动编码为data
r = requests.post('http://httpbin.org/post', data = 'ABC')
print(r.text)
{ ...
"data": "ABC"
"form": {},
}
requests.put()
方法说明:
向HTML网页提交PUT请求的方法,对应于HTTP的PUT,请求向URL位置存储一个资源,覆盖原URL位置的资源
使用方法:
requests.put(url, data=None, **kwargs)
参数说明:
- url:拟更新页面的url链接
- data:字典、字节序列或文件,Request的内容
- **kwargs:11个控制访问参数
使用示例:
payload = {'key1': 'value1', 'key2': 'value2'}
r = requests.put('http://httpbin.org/put', data = payload)
print(r.text)
{ ...
"form": {
"key2": "value2",
"key1": "value1"
},
}
requests.patch()
方法说明:
向HTML网页提交局部修改请求,对应于HTTP的PATCH,请求局部更新URL位置的资源,即改变该处资源的部分内容
使用方法:
requests.patch(url, data=None, **kwargs)
参数说明:
- url:拟更新页面的url链接
- data:字典、字节序列或文件,Request的内容
- **kwargs:11个控制访问参数
requests.delete()
方法说明:
向HTML页面提交删除请求,对应于HTTP的DELETE,请求删除URL位置存储的资源
使用方法:
requests.delete(url, **kwargs)
参数说明:
- url:拟删除页面的url链接
- **kwargs:12个控制访问参数
Requests库的七种异常
requests.ConnectionError:网络连接错误异常,如DNS查询失败、拒绝连接等
requests.HTTPError:HTTP错误异常
requests.URLRequired:URL缺失异常
requests.TooManyRedirects:超过最大重定向次数,产生重定向异常
requests.ConnectTimeout:连接远程服务器超时异常
requests.Timeout:请求URL超时,产生超时异常
爬取网页的通用代码框架
import requests
# 爬取网页的通用代码框架
def getHTMLTest(url):
try:
kv = {'user-agent': 'Mozilla/5.0'}
r = requests.get(url, headers=kv, timeout=30)
r.raise_for_status() # 若状态不是200,引发HTTPError异常
r.encoding = r.apparent_encoding
return r.text
except:
return '产生异常'
if __name__ == '__main__':
url = "http://www.baidu.com"
print(getHTMLTest(url))