3.1 requests与JSON基础

课程目标

  • 理解网络爬虫的基本概念及其在数据收集中的重要性
  • 掌握使用requests库发起HTTP请求并获取网页数据
  • 学习JSON数据格式的解析方法,并能够在Python中进行操作

课程内容

1. 网络爬虫简介

网络爬虫(Web Crawler)是一种自动遍历网页的程序,它能够访问网页并从中提取信息。在Python中,我们可以使用requests库来实现这一功能。

2. 请求的发送

使用requests库,我们可以轻松地发送HTTP请求。首先,我们需要导入requests模块,然后使用其方法来发送请求。

python 复制代码
import requests

# GET请求,获取网页内容
response = requests.get('https://www.xxx.com/')
print(response.text)  # 打印网页的源代码
3. 响应对象属性

每次调用requests发送请求后,都会返回一个Response对象。该对象包含了响应的详细信息,如状态码、头部、内容等。

  • status_code: 响应状态码
  • headers: 响应头部
  • content: 响应内容(字节格式)
  • text: 响应内容(解码后的字符串格式)
  • json(): 解析JSON响应内容
4. requests模块的常用方法

requests模块提供了一系列方法来发送不同类型的HTTP请求。

  • get(url, params=None): 发送GET请求
  • post(url, data=None): 发送POST请求
  • put(url, data=None): 发送PUT请求
  • delete(url): 发送DELETE请求
  • head(url): 发送HEAD请求
GET请求

GET请求是最常用的HTTP方法之一,通常用于请求服务器发送资源。GET请求应该只用于获取数据,而不是修改服务器上的资源。

python 复制代码
# 发送GET请求
response = requests.get('https://api.example.com/data')
print(response.text)  # 打印获取的资源内容

当使用GET请求时,可以通过params参数传递查询字符串,服务器根据查询字符串返回相应的数据。

python 复制代码
# 发送GET请求并传递查询参数
params = {'key1': 'value1', 'key2': 'value2'}
response = requests.get('https://api.example.com/data', params=params)
POST请求

POST请求用于向服务器提交数据进行处理,例如表单提交。服务器通常会根据提交的数据进行一些操作,如创建新的资源。

python 复制代码
# 发送POST请求
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.post('https://api.example.com/submit', data=data)
print(response.text)  # 打印服务器响应的内容

POST请求的数据可以通过data参数传递,通常是字典类型,requests会自动将其编码为表单提交所需的格式。

PUT请求

PUT请求与POST类似,也是用于向服务器提交数据。不同之处在于PUT通常用于更新服务器上的现有资源或创建新资源,而POST用于创建新资源。

python 复制代码
# 发送PUT请求
data = {'key1': 'value1', 'key2': 'value2'}
response = requests.put('https://api.example.com/resource/123', data=data)
print(response.text)  # 打印服务器响应的内容

PUT请求通常用于更新资源,URL中包含了要更新的资源标识符。

DELETE请求

DELETE请求用于删除服务器上的资源。通过指定的URL,服务器将删除对应的资源。

python 复制代码
# 发送DELETE请求
response = requests.delete('https://api.example.com/resource/123')
print(response.text)  # 打印服务器响应的内容

DELETE请求通常不需要传递额外的数据,只需要指定要删除的资源URL。

HEAD请求

HEAD请求与GET请求相似,但它只请求资源的头部信息,不包括资源的主体。HEAD请求常用于检查资源是否存在,或者获取资源的元数据。

python 复制代码
# 发送HEAD请求
response = requests.head('https://api.example.com/data')
print(response.status_code)  # 打印状态码,200表示资源存在
print(response.headers)  # 打印响应头信息

HEAD请求不返回资源内容,只返回头部信息,因此可以用来检查资源的状态或获取资源的元数据而不加载整个资源。

5. 请求头和查询参数

在发送请求时,我们经常需要设置请求头或传递查询参数。

python 复制代码
# 设置请求头
headers = {
    'User-Agent': 'Mozilla/5.0',
    'Accept': 'application/json'
}

# 发送GET请求,传递查询参数
params = {'key': 'value'}
response = requests.get('https://api.example.com/data', headers=headers, params=params)
6. JSON数据的解析

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。

python 复制代码
# 请求JSON数据
response = requests.get('https://api.example.com/data')
data = response.json()  # 将响应内容解析为JSON对象

# 访问解析后的数据
print(data['key'])
7.cookies

在发送请求时,我们可能需要设置cookies,以便服务器能够识别用户身份。

示例

python 复制代码
cookies = {
    'sessionid': '1234567890'
}
response = requests.get('https://api.example.com/data', cookies=cookies)

附录

响应状态码
状态码 类别 含义
100 信息性状态码 继续
101 信息性状态码 切换协议
200 成功 OK
201 成功 创建成功
202 成功 接受
203 成功 非授权信息
204 成功 无内容
205 成功 重置内容
206 成功 部分内容
300 重定向 多种选择
301 重定向 永久移动
302 重定向 临时移动(以前称为"重定向")
303 重定向 查看其他位置
304 重定向 未修改
307 重定向 临时重定向(不允许POST变更为GET)
308 重定向 永久重定向(不允许POST变更为GET)
400 客户端错误 错误请求
401 客户端错误 未授权
402 客户端错误 需要付款
403 客户端错误 禁止访问
404 客户端错误 未找到
405 客户端错误 方法不允许
406 客户端错误 不接受
407 客户端错误 需要代理授权
408 客户端错误 请求超时
409 客户端错误 冲突
410 客户端错误 已删除
411 客户端错误 需要有效长度
412 客户端错误 未满足前提条件
413 客户端错误 请求实体过大
414 客户端错误 请求URI过长
415 客户端错误 不支持的媒体类型
416 客户端错误 请求范围不符合要求
417 客户端错误 预期失败
500 服务器错误 内部服务器错误
501 服务器错误 未实现
502 服务器错误 错误的网关
503 服务器错误 服务不可用
504 服务器错误 网关超时
505 服务器错误 HTTP版本不受支持
请求头字段解释
字段名称 描述 示例值
authority HTTP/2协议中的请求目标服务器权威名称,相当于HTTP/1中的Host字段 'tgfly.huizejiuzhou.com'
accept 客户端能够接受的内容类型 'application/json, text/plain, /'
accept-language 客户端能够接受的语言,优先级从高到低 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6'
cache-control 控制响应的缓存行为 'no-cache'
content-type 请求体的媒体类型 'application/json'
origin 请求发起的源站点,用于服务器判断是否允许跨域请求 'https://tgfly.huizejiuzhou.com'
pragma 告诉中间代理不要缓存响应,主要用于HTTP/1 'no-cache'
referer 请求是从哪个页面发起的,用于服务器分析请求来源 'https://tgfly.huizejiuzhou.com/login'
sec-ch-ua 用户代理字符串的一部分,标识浏览器类型和版本 '"Chromium";v="122", "Not(A:Brand";v="24", "Microsoft Edge";v="122"'
sec-ch-ua-mobile 请求是否来自移动设备 '?0'
sec-ch-ua-platform 用户的操作系统平台 '"Windows"'
sec-fetch-dest 请求的目的地 'empty'
sec-fetch-mode 请求是否使用CORS模式 'cors'
sec-fetch-site 请求是否来自同一源站点 'same-origin'
user-agent 提供关于用户浏览器、操作系统和设备的信息 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36 Edg/122.0.0.0'
相关推荐
农民小飞侠6 分钟前
python AutoGen接入开源模型xLAM-7b-fc-r,测试function calling的功能
开发语言·python
战神刘玉栋8 分钟前
《程序猿之设计模式实战 · 观察者模式》
python·观察者模式·设计模式
敲代码不忘补水10 分钟前
Python 项目实践:简单的计算器
开发语言·python·json·项目实践
鸽芷咕1 小时前
【Python报错已解决】ModuleNotFoundError: No module named ‘paddle‘
开发语言·python·机器学习·bug·paddle
子午2 小时前
动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目
人工智能·python·cnn
风等雨归期2 小时前
【python】【绘制小程序】动态爱心绘制
开发语言·python·小程序
Adolf_19932 小时前
Flask-JWT-Extended登录验证, 不用自定义
后端·python·flask
冯宝宝^2 小时前
基于mongodb+flask(Python)+vue的实验室器材管理系统
vue.js·python·flask
叫我:松哥2 小时前
基于Python flask的医院管理学院,医生能够增加/删除/修改/删除病人的数据信息,有可视化分析
javascript·后端·python·mysql·信息可视化·flask·bootstrap
Eiceblue2 小时前
Python 复制Excel 中的行、列、单元格
开发语言·python·excel