python爬虫知识点3-常用请求库requests

当幸福来临的时候

不骄不傲

当困难来临的时候

安之若素

让自己成为

情绪的控制者

做一个成熟的人

今天探长会和大家一起探讨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库常用的使用情况,探长希望能够帮助到您!如有任何问题,欢迎与探长联系(昵称黄象探长),或者进行留言互动!

茫茫人海中 期待与你相遇 在你我最美丽的时刻

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180513G1CMX800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励