1. 安装requests库
在电脑主界面Windows+R,然后输入“cmd”进入命令行窗口
输入 pip install requests
即可下载。
2. 测试
启动idle测试
#以百度为例
>>> import requests
>>> r = requests.get("http://www.baidu.com")
#状态码为200,表示访问成功
>>> r.status_code
200
>>> r.encoding = 'utf-8'
#打印网页内容
>>> r.text
3. 爬取网页的通用代码框架
网络连接有风险,异常处理很重要
import requests
def getHTMLText(url):
try:
r = requests.get(url,timeout=30)
r.raise_for_status() #如果不是200,产生异常requests.HTTPError
r.encoding = r.apparent_encoding
return r.text
except:
return "产生异常"
if __name__ == "__main__":
url = "http://www.baidu.com"
print(getHTMLText(url))
4. requests库的7个主要的方法
requests.request() | 构造一个请求,支撑一下各方法的基本方法 |
requests.get() | 获取HTML网页的主要方法,对应于HTTP的GET |
requests.head() | 获取HTML网页头信息的方法,对应于HTTP的HEAD |
requests.post() | 向HTML网页提交POST请求的方法,对应于HTTP的POST |
requests.put() | 向HTML网页提交PUT请求的方法,对应于HTTP的PUT |
requests.patch() | 向HTML网页提交局部修改请求,对应于HTTP的PATCT |
requests.delete() | 向HTML网页提交删除请求,对应于HTTP的DELETE |
4.1 requests库的get()方法
r=requests.get(url)
包括两个重要的对象:
构造一个向服务器请求资源的Request对象;返回一个包含服务器资源的Response对象
属性
r.status_code | HTTP请求的返回状态,200表示连接成功,404表示失败 |
r.text | HTTP响应内容的字符串形式,即,url对应的页面内容 |
r.encoding | 从HTTP header中猜测的响应内容编码方式(如果header中不存在charset,则认为编码为ISO-8859-1) |
r.apparent_encoding | 从内容中分析的响应内容编码方式(备选编码方式) |
r.content | HTTP响应内容的二进制形式 |
Requests库的异常
requests.ConnectionError | 网络连接错误异常,如DNS查询失败、拒绝连接等 |
requests.HTTPError | HTTP错误异常 |
requests.URLRequired | URL缺失异常 |
requests.TooManyRedirects | 超过最大重定向次数,产生重定向异常 |
requests.ConnectTimeout | 连接远程服务器超时异常 |
requests.Timeout | 请求URL超时,产生超时异常 |
Requests库的判别异常方法
r.raise_for_status()
如果不是200,产生异常requests.HTTPError异常
基本格式
request.get(url,params=None,**kwargs)
url:拟获取页面的url链接
params:url中额外参数,字典或字节流格式,可选
**kwargs:12个控制访问的参数
4.2 Requests库的head()方法
用很少的网络流量获取概要信息
>>> r = requests.head('http://www.baidu.com')
>>> r.headers
{'Cache-Control': 'private, no-cache, no-store, proxy-revalidate, no-transform', 'Content-Encoding': 'gzip', 'Content-Type': 'text/html', 'Date': 'Thu, 04 Apr 2019 08:55:34 GMT', 'Last-Modified': 'Mon, 13 Jun 2016 02:50:26 GMT', 'Pragma': 'no-cache', 'Server': 'bfe/1.0.8.18', 'Connection': 'close'}
>>> r.text
' '
4.3 Requests库的post()方法
向URL POST一个字典自动编码为form(表单)
#键值对
>>> payload = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.post('http://www.baidu.com', data = payload)
>>>print( r.text)
{
...
''form'': {
''key2'': ''values2'',
''key1'': ''values1''
},
}
向URL POST一个字符串自动编码为data
>>> r = requests.post('http://www.baidu.com', data = 'ABC')
>>>print( r.text)
{
...
''data'': ''ABC'',
''form'': {},
}
4.4 Requests库的put()方法
与post()方法类似,只是将原有的方法覆盖掉
5. 7个方法的主要功能
5.1 requests.request(method, url, **kwargs)
5.1.1 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)
5.1.2 url:拟获取页面的url链接
5.1.3 **kwargs:13个控制访问的参数,均为可选项
(1)params:字典或者字节序列,作为参数增加到url中
>>> kv = {'key1': 'value1', 'key2': 'value2'}
>>> r = requests.request('GET', 'http://python123.io/ws', params = kv)
>>> print(r.url)
https://python123.io/ws?key1=value1&key2=value2
(2)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)
(3)json:JSON格式的数据,作为Request的内容
(4)headers:字典,HTTP定制头
>>> hd = {'user-agent': 'Chrome/10'}
>>> r = requests.request('POST', 'http://python123.io/ws', header = hd)
(5)cookies:字典或CookieJar,Request中的cookie
(6)auth:元祖,支持HTTP认证功能
(7)files:字典类型,传输文件
>>> fs = {'file': open('data.xls', 'rb')}
>>> r = requests.request('POST', 'http://python123.io/ws', files = fs)
(8)timeout:设定超时时间,秒为单位
(9)proxies:字典类型,设定访问代理服务器,可以增加登录认证
访问百度时,所使用IP地址为代理服务器的IP地址,有效地防止爬取的逆追踪
>>> pxs = { 'http': 'http://user:[email protected]:1234',
... 'https':'https://10.10.10.1:4321' }
>>> r = requests.request('GET', 'http://www.baidu.com', proxies = pxs)
(10)allow_redirects:True/False,默认为True,重定向开关
(11)stream:True/False,默认为True,获取内容立即下载开关
(12)verify:True/False,默认为True,认证SSL证书开关
(13)cert:本地SSL证书路径
5.2 requests.get(url, params=None, **kwargs)
url:拟获取页面的url链接
params:url中的额外参数,字典或者字节流格式,可选
**kwargs:12个控制访问的参数
5.3 requests.head(url, **kwargs)
url:拟获取页面的url链接
**kwargs:13个控制访问的参数
5.4 requests.post(url,data=None, json=None, **kwargs)
url:拟获取页面的url链接
data:字典、字节序列或者文件,Request的内容
**kwargs:11个控制访问的参数
5.5 requests.put(url, data=None, **kwargs)
url:拟获取页面的url链接
data:字典、字节序列或者文件,Request的内容
**kwargs:12个控制访问的参数
5.6 requests.patch(url, data=None, **kwargs)
url:拟获取页面的url链接
data:字典、字节序列或者文件,Request的内容
**kwargs:12个控制访问的参数
5.7 requests.delete(url, **kwargs)
url:拟删除页面的url链接
**kwargs:13个控制访问的参数