当幸福来临的时候
不骄不傲
当困难来临的时候
安之若素
让自己成为
情绪的控制者
做一个成熟的人
今天探长会和大家一起探讨python爬虫中使用频率最高的一个请求库,即requests库,探长将从requests安装、基础用法、高级用法以及案例等方法进行分析。
Part 1 - 什么是requests库
requests库是python的一个第三方请求库,基于urllib库(python用于HTTP请求的自带标准库)改写而成,因此相比urllib库requests更富人性化、便捷性,是爬虫逻辑中使用最频繁的HTTP请求库。
Part 2 - requests库的安装
2.1 原生python环境下requests库的安装
原生python环境下不存在requests库(由于是第三方库),因此需要手动进行安装。通过在cmd命令窗口中输入pip install + packageName的方式进行安装,具体命令如下:
2.2 anaconda环境下requests库的安装
anaconda是一个开源的python数据科学集成环境,除了自带python外,内部包含了大量的常用数据科学包,其中就包含了requests库,因此在anaconda环境下无需进行安装。
Part 3 - requests库基础用法
我们每次使用浏览器进行信息查询都是一次旅行的过程,首先通过客户端向服务器发起request请求,服务器在数据库中进行信息的检索,并把检索到的信息传给服务器,服务器通过response响应把信息传递到客户端,客户端上的浏览器再通过渲染,把页面呈现在我们目前。
3.1 request请求过程四要素
request请求过程包含了四部分:请求方法、请求url、请求头、请求体,它们构成了一个完整的请求过程;
请求url类似于收信人地址,是网络中标识网页的唯一地址,每个网页都有一个唯一的url;
请求头类似于寄信人信息,包含了寄信人的身份信息、浏览器信息等;
请求方法是以什么方式发送请求,常用的方法有get、post两种;
请求体/请求参数是对请求url的补充,请求体用于post请求,请求参数用于get请求。
3.2 常见的请求方法
# 导入requests包
importrequests
# 基本get请求
response = requests.get('https://www.baidu.com')
response.encoding ='utf-8'
# 基本post请求
url ='http://httpbin.org/post'
data = {'name':'黄象探长'}
response = requests.post(url,data=data)
3.3 带header头信息的请求
# 带header头信息的请求
url ='https://www.baidu.com'
headers = {'User-Agent':''}
response1 = requests.get(url,headers=headers)
3.4 带params参数的请求
# 带params参数的请求
url ='http://httpbin.org/get'
params = {'name':'黄象探长'}
response2 = requests.get(url,params=params)
3.5 response响应过程四要素
response响应过程包含了四部分:响应状态码、响应头、响应体、其他;
响应状态码是标识响应状态的信息,例如200状态码表示请求成功,301状态码表示网页被转移到其他url、404状态码表示请求的网页不存在、500状态码表示内部服务器错误等;
响应体是响应最核心部分,需要获取的数据全部包含在响应体中,是网页具体内容的体现。
3.6 响应信息的获取
# 响应信息的获取
# 1. 响应状态码的获取
print(response.status_code)
# 2. 获取响应体
print(response.text) # 文档对象响应体的获取
print(response.content) # 二进制对象响应体的获取
# 3. 响应头信息的获取
print(response.headers)
# 4. 响应cookies的获取
forname,valueinresponse1.cookies.items():
print(name,'=',value)
Part 4 - requests库高级用法
4.1 超时请求
为防止服务器不能及时响应,出现长时间等待的情况,在发送请求到服务器时通常需要加上timeout参数,此时如果请求时间超过设置的timeout值,那么程序会返回异常。
# 1. 超时请求
url ='https://www.baidu.com'
response3 = requests.get(url,timeout=5)
4.2 代理请求
如果爬取的网站具体反爬措施,同时我们爬取的数据量大,此时很容易出现反爬异常,因此我们需要在出现异常时变更代理,促使程序继续正常运行。
常见的代理有HTTP代理、socks代理两种,其中socks代理需要通过第三方库安装(pip install requests[socks])
# 2. 代理请求
proxies = {
'http':'http://10.20.1:128',
'https':'http://10.10.1.10:1080',
'http':'socks5://10.30.1.10:9780'
}
response = requests.get(url,proxies=proxies)
如果代理有账号密码,可以通过下面方法进行设置:
4.3 请求异常处理
# 异常处理-请求超时异常
fromrequestsimportTimeout
url ='https://www.python.org'
try:
response5 = requests.get(url,timeout=0.03)
exceptTimeout:
print('请求超时')
更多异常见官方文档http://docs.python-requests.org/zh_CN/latest/api.html#id3
Part 5 - 小案例
# 小案例
importrequests
fromrequestsimportTimeout
fromrequestsimportHTTPError
url ='https://www.baidu.com'
headers = {'User-Agent':''}
try:
response = requests.get(url,headers=headers)
response.encoding ='utf-8'
ifresponse.status_code =='200':
html = response.text
print(html)
else:print('请求状态码不为200')
exceptTimeout:
print('请求页面超时')
exceptHTTPError:
print('HTTP请求错误')
以上就是requests库常用的使用情况,探长希望能够帮助到您!如有任何问题,欢迎与探长联系(昵称黄象探长),或者进行留言互动!
茫茫人海中 期待与你相遇 在你我最美丽的时刻
领取专属 10元无门槛券
私享最新 技术干货