Request库的安装方法
首先用管理员权限启用command控制台
然后安装request库
pip install requests
测试一下request库的安装效果
import requests
r = requests.get(“http://www.baidu.com”)
r.status_code
>>>状态码是200,表示访问成功
更改网页编码为utf-8编码,打印网页内容
r.encoding = ‘utf-8’
r.text
requests库有7个主要方法
requests.get方法
获得一个网页的最简单的一行代码就是
r = requests.get(url)
这里面我们通过get方法和url来构造一个向服务器请求资源的Request对象
requests.get函数返回的内容是一个Response对象,用变量r来表示
Response对象包含了从服务器返回的所有相关资源
requests.get函数的完整使用方法有三个参数
requests.get(url, params=None, **kwargs)
·url : 拟获取页面的url链接
·params : url中的额外参数,字典或字节流格式,可选
·**kwargs: 12个控制访问的参数
在r = requests.get(url)这行代码中,最重要的是Request和Response这两个对象,而获得网络内容的Response对象又是重中之重,它包含爬虫返回的内容
在Response对象中,最常用的是如下五个属性,它们是访问网页最常用也是最必要的属性
(1)r.status_code
HTTP请求的返回状态,200表示连接成功,404表示失败
(2)r.text
HTTP响应内容的字符串形式,即,url对应的页面内容
(3)r.encoding
从HTTP header中猜测的响应内容编码方式
(4)r.apparent_encoding
从内容中分析出的响应内容编码方式(备选编码方式)
(5)r.content
HTTP响应内容的二进制形式
比如:我们从一个url链接上获得一个图片,这个图片里的资源是以二进制形式存储的,那我就可以用r.content来还原这个图片
在使用get方法获得网络资源的时候,有如下的基本流程
先用r.status_code来检查状态,如果是200,则可以用r.text, r.encoding,r.apparent_encoding,r.content去解析访问的内容;如果返回的状态码是404或者是其他,则说明这次访问因某些原因出错,将产生异常
理解Response编码
r.encoding是从HTTP header中猜测的响应内容编码方式
r.apparent_encoding是从内容中分析出的响应内容编码方式(备选编码方式)
r.encoding:如果header中不存在charset,则认为编码为ISO‐8859‐1
r.text根据r.encoding显示网页内容
r.apparent_encoding:根据网页内容分析出的编码方式可以看作是r.encoding的备选
爬取网页的通用代码框架
一组可以准确地可靠地爬取网页内容的代码
r = requests.get(url)并不是一定成立的
因为网络连接有风险,所以这样的语句它的异常处理十分重要
Requests库支持6种常用的连结异常
(1)requests.ConnectionError 网络连接错误异常,如DNS查询失败、拒绝连接等
(2)requests.HTTPError HTTP错误异常
(3)requests.URLRequired URL缺失异常
(4)equests.TooManyRedirects 超过最大重定向次数,产生重定向异常
(5)requests.ConnectTimeout 连接远程服务器超时异常
(6)requests.Timeout 请求URL超时,产生超时
Response异常,Response提供了一个方法
r.raise_for_status() 如果不是200,产生异常 requests.HTTPError
r.raise_for_status()在方法内部判断r.status_code是否等于200,不需要增加额外的if语句,该语句便于利用try‐except进行异常处理
爬取网页的通用代码框架
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))
通用代码框架使得爬取网页更有效、更稳定、更可靠