Python 爬虫(二):Requests 库

简介: Python 爬虫之Requests

所谓爬虫就是模拟客户端发送网络请求,获取网络响应,并按照一定的规则解析获取的数据并保存的程序。要说 Python 的爬虫必然绕不过 Requests 库。

1 简介

对于 Requests 库,官方文档是这么说的:

Requests 唯一的一个非转基因的 Python HTTP 库,人类可以安全享用。
警告:非专业使用其他 HTTP 库会导致危险的副作用,包括:安全缺陷症、冗余代码症、重新发明轮子症、啃文档症、抑郁、头疼、甚至死亡。

这个介绍还是比较生动形象的,便不再多说。安装使用终端命令 pip install requests

2 快速上手

2.1 发送请求

导入 Requests 模块:

import requests

获取网页:

r = requests.get('http://xxx.xxx')

此时,我们获取了 Response 对象 r,我们可以通过 r 获取所需信息。Requests 简便的 API 意味着所有 HTTP 请求类型都是显而易见的,我们来看一下使用常见 HTTP 请求类型 get、post、put、delete 的示例:

r = requests.head('http://xxx.xxx/get')
r = requests.post('http://xxx.xxx/post', data = {
   'key':'value'})
r = requests.put('http://xxx.xxx/put', data = {
   'key':'value'})
r = requests.delete('http://xxx.xxx/delete')

通常我们会设置请求的超时时间,Requests 使用 timeout 参数来设置,单位是秒,示例如下:

r = requests.head('http://xxx.xxx/get', timeout=1)

2.2 参数传递

在使用 get 方式发送请求时,我们会将键值对形式参数放在 URL 中问号的后面,如:http://xxx.xxx/get?key=val ,Requests 通过 params 关键字,以一个字符串字典来提供这些参数。比如要传 key1=val1key2=val2http://xxx.xxx/get,示例如下:

pms= {
   'key1': 'val1', 'key2': 'val2'}
r = requests.get("http://xxx.xxx/get", params=pms)

Requests 还允许将一个列表作为值传入:

pms= {
   'key1': 'val1', 'key2': ['val2', 'val3']}

:字典里值为 None 的键都不会被添加到 URL 的查询字符串里。

2.3 响应内容

我们来获取一下服务器的响应内容,这里地址 https://api.github.com 为例:

import requests
r = requests.get('https://api.github.com')
print(r.text)

# 输出结果
# {"current_user_url":"https://api.github.com/user","current_user...

当访问 r.text 之时,Requests 会使用其推测的文本编码,我们可以使用 r.encoding 查看其编码,也可以修改编码,如:r.encoding = 'GBK',当改变了编码,再次访问 r.text 时,Request 都将会使用 r.encoding 的新值。

1)二进制响应内容
比如当我们要获取一张图片的数据,会以二进制的方式获取响应数据,示例如下:

from PIL import Image
from io import BytesIO
i = Image.open(BytesIO(r.content))

2)JSON响应内容
Requests 中已经内置了 JSON 解码器,因此我们可以很容易的对 JSON 数据进行解析,示例如下:

import requests
r = requests.get('https://api.github.com')
r.json()

:成功调用 r.json() 并不一定响应成功,有的服务器会在失败的响应中包含一个 JSON 对象(比如 HTTP 500 的错误细节),这时我们就需要查看响应的状态码了 r.status_coder.raise_for_status(),成功调用时 r.status_code 为 200,r.raise_for_status() 为 None。

2.4 自定义请求头

当我们要给请求添加 headers 时,只需给 headers 参数传递一个字典即可,示例如下:

url = 'http://xxx.xxx'
hds= {
   'user-agent': 'xxx'}
r = requests.get(url, headers=hds)

:自定义 headers 优先级是低于一些特定的信息的,如:在 .netrc 中设置了用户认证信息,使用 headers 设置的授权就不会生效,而当设置了 auth 参数,.netrc 的设置会无效。所有的 headers 值必须是 string、bytestring 或者 unicode,通常不建议使用 unicode。

2.5 重定向与历史

默认情况下,Requests 会自动处理除了 HEAD 以外的所有重定向,可以使用响应对象的 history 属性来追踪重定向,其返回为响应对象列表,这个列表是按照请求由晚到早进行排序的,看一下示例:

import requests
r = requests.get('http://github.com')
print(r.history)
# 输出结果
# [<Response [301]>]

如果使用的是 get、post、put、delete、options、patch 可以使用 allow_redirects 参数禁用重定向。示例如下:

r = requests.get('http://xxx.xxx', allow_redirects=False)

2.6 错误与异常

当遇到网络问题(如:DNS 查询失败、拒绝连接等)时,Requests 会抛出 ConnectionError 异常;在 HTTP 请求返回了不成功的状态码时, Response.raise_for_status() 会抛出 HTTPError 异常;请求超时,会抛出 Timeout 异常;请求超过了设定的最大重定向次数,会抛出 TooManyRedirects 异常。所有 Requests 显式抛出的异常都继承自 requests.exceptions.RequestException。

相关文章
|
17天前
|
数据采集 存储 XML
Python爬虫:深入探索1688关键词接口获取之道
在数字化经济中,数据尤其在电商领域的价值日益凸显。1688作为中国领先的B2B平台,其关键词接口对商家至关重要。本文介绍如何通过Python爬虫技术,合法合规地获取1688关键词接口,助力商家洞察市场趋势,优化营销策略。
|
7天前
|
XML JSON 数据库
Python的标准库
Python的标准库
119 77
|
2天前
|
数据采集 JSON API
如何利用Python爬虫淘宝商品详情高级版(item_get_pro)API接口及返回值解析说明
本文介绍了如何利用Python爬虫技术调用淘宝商品详情高级版API接口(item_get_pro),获取商品的详细信息,包括标题、价格、销量等。文章涵盖了环境准备、API权限申请、请求构建和返回值解析等内容,强调了数据获取的合规性和安全性。
|
2天前
|
JSON 数据可视化 测试技术
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
18 7
|
22天前
|
机器学习/深度学习 算法 数据挖掘
数据分析的 10 个最佳 Python 库
数据分析的 10 个最佳 Python 库
68 4
数据分析的 10 个最佳 Python 库
|
8天前
|
XML JSON 数据库
Python的标准库
Python的标准库
36 11
|
21天前
|
人工智能 API 开发工具
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
吴恩达发布的开源Python库aisuite,提供了一个统一的接口来调用多个大型语言模型(LLM)服务。支持包括OpenAI、Anthropic、Azure等在内的11个模型平台,简化了多模型管理和测试的工作,促进了人工智能技术的应用和发展。
86 1
aisuite:吴恩达发布开源Python库,一个接口调用多个大模型
|
8天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
48 8
|
7天前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
29天前
|
存储 人工智能 搜索推荐
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
Memoripy 是一个 Python 库,用于管理 AI 应用中的上下文感知记忆,支持短期和长期存储,兼容 OpenAI 和 Ollama API。
90 6
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库