Python网络爬虫与信息提取(一)——Requests库的安装、Requests库的get()方法、爬取网页的通用代码框架

一:安装第三方库requests

首先打开命令提示符(以管理员身份运行)

 

输入pip install requests,然后回车

首次安装的时候出现了问题

 

百度之后是说版本太低

按照上面的提示更新pip还是显示WARNING,最后卸载python,重新安装python,再更新pip就可以了,可能是电脑里有好几个版本的python所致

 

二:Requests库的7个主要方法

方法

说明

requests.request()

构造一个请求,支撑以下各方法的基础方法

requests.get()

获取HTML网页的主要方法,对应于HTTPGET

requests.head()

获取HTML网页头信息的方法,对应于HTTPHEAD

requests.post()

HTML网页提交POST请求的方法,对应于HTTPPOST

requests.put()

HTML网页提交PUT请求的方法,对应于HTTPPUT

requests.patch()

HTML网页提交局部修改请求,对应于HTTPPATCH

requests.delete()

HTML网页提交删除请求,对应于HTTPDELETE

注:其余6个方法都是通过调用request()方法来实现的

1get()方法

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__ 。这句话的意思就是,当模块被直接运行时,以下代码块将被运行,当模块是被导入时,代码块不被运行

posted @ 2020-04-15 21:36  白菜茄子  阅读(709)  评论(0编辑  收藏  举报