Python网络爬虫与信息提取(一)——Requests库的安装、Requests库的get()方法、爬取网页的通用代码框架
一:安装第三方库requests
首先打开命令提示符(以管理员身份运行)
输入pip install requests,然后回车
首次安装的时候出现了问题
百度之后是说版本太低
按照上面的提示更新pip还是显示WARNING,最后卸载python,重新安装python,再更新pip就可以了,可能是电脑里有好几个版本的python所致
二: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的PATCH |
requests.delete() |
向HTML网页提交删除请求,对应于HTTP的DELETE |
注:其余6个方法都是通过调用request()方法来实现的
1:get()方法
r=requests.get(url) 构造一个向服务器请求资源的Request对象
返回内容用r表示,是一个Response对象,包含从服务器返回的所有相关资源
完整使用方法requests.get(url,params=None,**kwargs)
url: 要获取的页面的连接
params: url中的额外参数,字典或字节流格式。可选
**kwargs: 12个控制访问的的参数。可选
例子
Response对象的属性
属性 |
说明 |
r.status_code |
HTTP请求的返回状态,200表示连接成功,404(不是202)表示连接失败 |
r.text |
HTTP相应内容的字符串形式,即url对应的页面内容 |
r.encoding |
从HTTP header中猜测的相应内容编码方式 |
r.apparent_encoding |
从内容中分析出的相应内容编码方式(备选编码方式) |
r.content |
HTTP响应内容的二进制形式。eg:从一个url的链接上获得一个图片,图片里面的资源是以二进制形式存储的,可以通过r.content来还原这个图片 |
使用get()方法访问网上资源有一个基本的流程:
例子:
r.encoding:是从HTTP header中的charset字段中获得的,如果HTTP header中有一个这样的字段,说明访问的服务器对其资源的编码是有要求的,而这样的编码会获得回来,存在r.encoding中,但并不是所有的服务器对它的资源编码都是有要求的,如果header中不存在charset字段,则认为编码为ISO-8859-1(默认),但这个编码并不能解析中文,所以requests库提供了一个备选编码r.apparent_encoding,这个编码根据HTTP内容部分分析内容中出现文本可能的编码方式,原则来说这个编码比encoding更加准确。因此当encoding不能正确解析编码,便使用备选编码来进行替换解析(将apparent赋值给encoding)。
2:爬取网页的通用代码框架
直接使用get()进行爬取,不一定会成功,毕竟网络连接有风险,而异常处理就显得很重要了。
requests库的异常处理
异常 |
说明 |
requests.ConnectionError |
网络连接错误异常。如DNS查询失败、服务器防火墙拒绝连接 |
requests.HTTPError |
HTTP协议层面错误异常 |
requests.URLRequird |
URL缺失造成的异常 |
requests.TooManyRedirects |
超过最大重定向次数,产生重定向异常。经常是对复杂的链接访问时产生的错误 |
requests.ConnectTimeout |
访问远程服务器的时候超时异常 |
requests.Timeout |
请求URL超时,产生的超时异常 |
Timeout指整个过程,ConnectTimeout仅指链接服务器这个过程
r.raise_for_status(),专门与异常打交道,可以判断返回的Response类型r状态是不是200。如果是200,它将表示返回的内容是正确的;如果不是200,就会产生一个requests.HTTPError的异常。
__name__ 是当前模块名,当模块被直接运行时模块名为 __main__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行
作者:孙建钊
出处:http://www.cnblogs.com/sunjianzhao/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。