网络爬虫_Requests库入门
一、Requests库的安装
1.Requests库的安装与测试(简洁版):
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 # 打印网页内容
2.Requests库的更多介绍:
http://www.python-requests.org
3.Requests库的7个主要方法(简单介绍):
1、requests.request() 构造一个请求,支撑以下各方法的基础方法。 2、 requests.get() 获取HTML网页的主要方法,对应于HTTP的GET。 3、 requests.head() 获取HTML网页头信息的方法,对应于HTTP的HEAD 4、 requests.post() 向HTML网页提交post请求方法,对应于HTTP的POST 5、 requests.put() 向HTML网页提交put请求方法,对应于HTTP的PUT 6、 requests.patch() 向HTML网页提交局部修改的请求,对应于HTTP的PATCH 7、 requests.delete() 向HTML网页提交删除的请求,对应于HTTP的DELETE
二、Requests库的get()方法
1. 获取网页的代码:
r = requests.get(url) 构造一个向服务器请求资源的Request对象 requests库内部生成,python大小写敏感,大写R 返回一个包含服务器资源的Response对象 用r标识 包含从服务器返回的所有相关资源
2.获取网页的完整代码:
requests.get(url, params=None,**kwargs) 各参数含义: url: 拟获取页面的URL链接 params:URL中的额外参数,字典或字节流格式,可选 **kwargs:12个控制访问的参数
3.Requests库的2个重要对象:
Request Response:包含了爬虫返回的内容,1. 返回内容 2. 请求信息
4.Response对象的属性:
r.status_code HTTP请求的返回状态,200表示成功,404表示失败(非200即为error) r.text HTTP响应内容的字符串形式,即URL对应的页面内容 r.encoding 从HTTP header中猜测的响应内容编码方式 r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式) r.content HTTP响应内容的二进制形式
5.解析过程:
解析返回值的基本流程: 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 # 打印网页内容,包含很多中文信息
6.理解Response的编码:
r.encoding 从HTTP header中猜测的响应内容编码方式 说明: 从header中的charset字段中获得编码方式, 如果服务器中有charset字段,说明服务器对编码有要求; 否则,无要求,且默认编码为 ISO-8859-1(不可以解析中文) r.apparent_encoding 从内容中分析出的响应内容编码方式(备选编码方式) 因此,当无法用r.encoding 获取正确编码时,则使用r.apparent 获取网页正确编码
三、爬取网页的通用代码框架
1. 爬取网页内容异常
我们使用requests.get(url)获取url网页内容, 由于网络连接有风险,这种语句的异常处理很重要 注:使用通用代码框架使得爬取网页过程更有效,稳定,可靠
2.理解Requests库的异常
1. requests.ConnectionError 网络连接错误异常,比如DNS查询失败、拒绝连接等 2. requests.HTTPError HTTP错误异常 3. requests.URLRequired URL缺失异常 4. requests.TooManyRedirects 超过最大重定向次数,产生重定向异常 5. requests.ConnectionTimeout 仅指连接远程服务超时 6. requests.Timeout 请求URL超时,产生超时异常
3.response对象提供的方法:
r.raise_for_status() 如果不是200,产生异常requests.HTTPError 功能:如果状态值返回200,则表示返回正常,否则产生HTTPError异常
4.爬取网页的通用代码框架:
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协议及Requests库方法
1. HTTP协议
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对应一个数据资源。
2.HTTP协议和Requests库功能一致性比较
HTTP协议 Requests库方法 功能一致性 GET requests.get() 一致 HEAD requests.head() 一致 POST requests.post() 一致 PUT requests.put() 一致 PATCH requests.patch() 一致 DELETE requests.delete() 一致
3.HTTP协议对资源的操作
1.GET 请求获取URL位置的资源 2.HEAD 请求获取URL1位置资源的响应消息报告,即获取该资源的头部信息 3.POST 请求向URL位置的资源后附加新的数据 4.PUT 请求向URL位置存储一个资源,覆盖原URL位置的资源 5.PATCH 请求局部更新URL位置的资源,即改变该处资源的部分内容 6.DELETE 请求删除URL位置存储的资源
4.理解PATCH和PUT的区别
需求:用户修改了UserName,其他不变 *采用PATCH,仅向URL提交UserName的局部更新请求。 *采用PUT,必须将所有20个字段一并提交到URL,未提交字段被删除。 如果资源很庞大,仅使用PATCH修改即可。 PATCH的最主要好处:节省网络带宽。
5.Requests库中post()方法
方法一:(字典存储)
# 该字典存储在form字段下,自动编码为form import requests payload = {'key1':'value1','key2':'value2'} r = requests.post('http://httpbin.org/post',data = payload) print(r.text)
输出结果:
{ ... "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", ... }
导致差异的解析:
根据用户提交数据的不同,在服务器上自动对相应数据整理。 put()方法类似,但是产生的效果是覆盖掉。
五、Requests库主要方法解析
1. requests方法
参数介绍:
requests.request(method, url, **kwargs) method : 请求方式,对应get/put/post等7种 url : 拟获取页面的url链接 **kwargs: 访问参数,13个
method:请求方式
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中
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
2. get方法[最常用的方法]
requests.get(url, params=None, **kwargs) url : 拟获取页面的url链接 params : url中的额外参数,字典或字节流格式,可选 **kwargs: 12个控制访问的参数(除了params)
3. head方法
requests.head(url, **kwargs) url : 拟获取页面的url链接 **kwargs: 13个控制访问的参数
4. post方法
requests.post(url, data=None, json=None, **kwargs) url : 拟更新页面的url链接 data : 字典、字节序列或文件,Request的内容 json : JSON格式的数据,Request的内容 **kwargs: 11个控制访问的参数(除了data,json)
5. put方法
requests.put(url, data=None, **kwargs)
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
**kwargs: 12个控制访问的参数
6. patch方法
requests.patch(url, data=None, **kwargs)
url : 拟更新页面的url链接
data : 字典、字节序列或文件,Request的内容
**kwargs: 12个控制访问的参数
7. delete方法
requests.delete(url, **kwargs) url : 拟删除页面的url链接 **kwargs: 13个控制访问的参数
RRR
本人计算机小白一枚,对编程有浓厚兴趣,在此贴出自己的计算机学习历程,还有很多不足,望多多指教!
读书后发现好多的内容与具体专业有偏差,没来得及完成,虽然“有时间我就会做...”是人生最大的谎言,但有时间我会继续搞定未完成的内容,有始有终,兴趣使然!