1. 在管理员权限下启动command窗口 2. 输入 pip install requests 便可安装 3. 安装完成后测试 import requests r = requests.get("http://www.baidu.com") r.status_code # 若是状态码输出200则表示访问成功 r.encoding = 'utf-8' r.text # 打印网页内容
http://www.python-requests.org
一、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的PATCH 七、 requests.delete() 向HTML网页提交删除的请求,对应于HTTP的DELETE
r = requests.get(url) 构造一个向服务器请求资源的Request对象 requests库内部生成,python大小写敏感,大写R 返回一个包含服务器资源的Response对象 用r标识 包含从服务器返回的全部相关资源
requests.get(url, params=None,**kwargs) 各参数含义: url: 拟获取页面的URL连接 params:URL中的额外参数,字典或字节流格式,可选 **kwargs:12个控制访问的参数
Request Response:包含了爬虫返回的内容,1. 返回内容 2. 请求信息
r.status_code HTTP请求的返回状态,200表示成功,404表示失败(非200即为error) r.text HTTP响应内容的字符串形式,即URL对应的页面内容 r.encoding 从HTTP header中猜想的响应内容编码方式 r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式) r.content HTTP响应内容的二进制形式
解析返回值的基本流程: 1. r.status_code 检查返回的response对象的状态,若是返回值是200,则继续 2. r.text r.encoding 3. r.apparent_encoding 4. r.content 具体操做: import requests # 导入requests库 r = requests.get("http://www.baidu.com") # 导入百度 r.status_code # 若是状态码输出200则表示访问成功 r.text # 打印网页内容 r.encoding # 查看网页编码格式 # 若输出格式为 ‘ISO-8859-1’,则打印网页内容为乱码(非中文) r.apparent_encoding # 查看该网页另一种编码格式 # 若输出格式为 ‘utf-8’,则打印网页内容中能够包含不少中文 r.encoding = 'utf-8' r.text # 打印网页内容,包含不少中文信息
r.encoding 从HTTP header中猜想的响应内容编码方式 说明: 从header中的charset字段中得到编码方式, 若是服务器中有charset字段,说明服务器对编码有要求; 不然,无要求,且默认编码为 ISO-8859-1(不能够解析中文) r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式) 所以,当没法用r.encoding 获取正确编码时,则使用r.apparent 获取网页正确编码
咱们使用requests.get(url)获取url网页内容, 因为网络链接有风险,这种语句的异常处理很重要 注:使用通用代码框架使得爬取网页过程更有效,稳定,可靠
1. requests.ConnectionError 网络链接错误异常,好比DNS查询失败、拒绝链接等 2. requests.HTTPError HTTP错误异常 3. requests.URLRequired URL缺失异常 4. requests.TooManyRedirects 超过最大重定向次数,产生重定向异常 5. requests.ConnectionTimeout 仅指链接远程服务超时 6. requests.Timeout 请求URL超时,产生超时异常
r.raise_for_status() 若是不是200,产生异常requests.HTTPError 功能:若是状态值返回200,则表示返回正常,不然产生HTTPError异常
import requests def getHTMLText(url): try: r = requests.get(url, 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(getHTMLText(url))
# 功能:处理爬虫过程当中出现的一系列错误或者网络不稳定的现象
HTTP协议,Hypertext Transfer Protocol,超文本传输协议 HTTP是一个基于“请求与响应”模式的、无状态的应用层协议 进一步解释: 用户发起请求,服务器做出相应 无状态:用户屡次发起请求之间并无关联 应用层协议工做在TCP协议之上 HTTP协议采用URL做为定位网络资源的标识。 URL格式 http://host[:port][path] host:合法的Internet主机域名或IP地址 port:端口号,缺省端口为80 path:请求资源的路径 实例: http://www.bit.edu.cn 指的是北京理工大学的官网 http://220.181.111.188/duty 指的是该主机下的duty 文件夹 HTTP URL的理解: URL是经过HTTP协议存取资源的Internet路径,一个URL对应一个数据资源。
HTTP协议 Requests库方法 功能一致性 GET requests.get() 一致 HEAD requests.head() 一致 POST requests.post() 一致 PUT requests.put() 一致 PATCH requests.patch() 一致 DELETE requests.delete() 一致
1.GET 请求获取URL位置的资源 2.HEAD 请求获取URL1位置资源的响应消息报告,即获取该资源的头部信息 3.POST 请求向URL位置的资源后附加新的数据 4.PUT 请求向URL位置存储一个资源,覆盖原URL位置的资源 5.PATCH 请求局部更新URL位置的资源,即改变该处资源的部份内容 6.DELETE 请求删除URL位置存储的资源
需求:用户修改了UserName,其余不变 *采用PATCH,仅向URL提交UserName的局部更新请求。 *采用PUT,必须将全部20个字段一并提交到URL,未提交字段被删除。 若是资源很庞大,仅使用PATCH修改便可。 PATCH的最主要好处:节省网络带宽。
方法一:(字典存储)python
# 该字典存储在form字段下,自动编码为form import requests payload = {'key1':'value1','key2':'value2'} r = requests.post('http://httpbin.org/post',data = payload) print(r.text)
输出结果:json
{ ... "form": { "key1": "value1", "key2": "value2" }, ... }
方法二:(data数据域存储)浏览器
# 向URL POST一个字符串,自动编码为data import requests r = requests.post('http://httpbin.org/post',data = 'ABC') print(r.text)
输出结果:服务器
{ ... "data": "ABC", ... }
致使差别的解析:cookie
根据用户提交数据的不一样,在服务器上自动对相应数据整理。 put()方法相似,可是产生的效果是覆盖掉。
参数介绍: 网络
requests.request(method, url, **kwargs) method : 请求方式,对应get/put/post等7种 url : 拟获取页面的url连接 **kwargs: 访问参数,13个
method:请求方式app
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)
**kwargs:控制访问的参数,均为可选项(如下是各类访问参数)框架
**kwargs : 控制访问的参数,均为可选项(如下是各类访问参数) params : 字典或字节序列,做为参数增长到url中 data : 字典、字节序列或文件对象,做为Request的内容 json : JSON格式的数据,做为Request的内容 headers : 字典,HTTP定制头(模拟浏览器) cookies : 字典或CookieJar,Request中的cookie auth : 元组,支持HTTP认证功能 files : 字典类型,传输文件 timeout : 设定超时时间,秒为单位 proxies : 字典类型,设定访问代理服务器,能够增长登陆认证 allow_redirects : True/False,默认为True,重定向开关 stream : True/False,默认为True,获取内容当即下载开关 verify : True/False,默认为True,认证SSL证书开关 cert : 本地SSL证书路径
参数的使用实例:params的使用:字典或字节序列,做为参数增长到url中post
import requests kv = {'key1':'value1','key2':'value2'} r = requests.request('GET','http://python123.io/ws',params=kv) print(r.url)
输出:将kv字段的内容附加到url中测试
https://python123.io/ws?key1=value1&key2=value2
requests.get(url, params=None, **kwargs) url : 拟获取页面的url连接 params : url中的额外参数,字典或字节流格式,可选 **kwargs: 12个控制访问的参数(除了params)
requests.head(url, **kwargs) url : 拟获取页面的url连接 **kwargs: 13个控制访问的参数
requests.post(url, data=None, json=None, **kwargs) url : 拟更新页面的url连接 data : 字典、字节序列或文件,Request的内容 json : JSON格式的数据,Request的内容 **kwargs: 11个控制访问的参数(除了data,json)
requests.put(url, data=None, **kwargs)
url : 拟更新页面的url连接
data : 字典、字节序列或文件,Request的内容
**kwargs: 12个控制访问的参数
requests.patch(url, data=None, **kwargs)
url : 拟更新页面的url连接
data : 字典、字节序列或文件,Request的内容
**kwargs: 12个控制访问的参数
requests.delete(url, **kwargs) url : 拟删除页面的url连接 **kwargs: 13个控制访问的参数
RRR