news 2026/4/18 3:31:22

Python 爬虫核心基础:请求与响应机制全解析(从 GET 请求到 JSON 分页实战)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python 爬虫核心基础:请求与响应机制全解析(从 GET 请求到 JSON 分页实战)

学爬虫,80% 的问题都出在「请求没发对」或「响应不会解析」。
本文从requests 请求方式、中文参数、响应解析、JSON 处理、多层嵌套、分页控制等核心点出发,系统梳理 Python 爬虫中最容易踩坑、但也最重要的一整套逻辑。


一、爬虫的本质:请求 → 响应

爬虫不是“抓网页”,而是“模拟浏览器发请求”。

浏览器做的事情只有两步:

1️⃣ 向服务器发送请求(Request)
2️⃣ 接收服务器返回的响应(Response)

Python 爬虫,本质上就是把这两步程序化、自动化


二、GET 请求的两种参数传递方式(必考)

方式一:URL 直接拼接参数(最直观)

url="https://www.xxx.com/search?q=胃炎&page=1"res=requests.get(url)

特点:

  • 和浏览器地址栏一模一样
  • 简单、直观
  • 参数一多就很乱,不利于维护

方式二:使用 params 字典传参(强烈推荐)

url="https://www.xxx.com/search"params={"q":"胃炎","page":1}res=requests.get(url,params=params)

优势:

  • 结构清晰
  • 易于调试和修改
  • requests 会自动帮你处理 URL 编码

📌重要技巧
requests.get(url, params)中,params是第二个默认参数,参数名可省略


三、中文参数 & URL 编码的坑(高频翻车点)

1️⃣ 浏览器 vs Python 的本质区别

  • 浏览器地址栏:
    👉 显示中文
    👉 实际发送的是%E8%83%83%E7%82%8E

  • Python requests:
    👉字典传参时,不能手动写编码
    👉 直接用中文即可

❌ 错误示例:

params={"q":"%E8%83%83%E7%82%8E"}# 很容易请求失败

✅ 正确写法:

params={"q":"胃炎"}

📌结论一句话记住

URL 编码只适用于 URL 字符串,不适用于 params 字典。


四、响应内容的三种获取方式

1️⃣res.text—— 文本内容(HTML / 普通文本)

  • 返回类型:str

  • 适用场景:

    • 搜索结果页
    • 医疗问答页
    • HTML 页面
html=res.text

⚠️ 注意:
res.text哪怕长得像字典,也还是字符串,不能直接['key']取值。


2️⃣res.content—— 二进制数据

  • 图片 / 视频 / 音频
  • 用于下载文件
img_bytes=res.content

3️⃣res.json()—— JSON 数据(最香)

data=res.json()

前提条件只有一个:

响应内容必须是标准的列表或字典结构

✅ 典型特征:

{"Code":200,"Data":{"Posts":[...]}}

❌ 不能用.json()的情况:

  • HTML 页面
  • <div><span>的文本页面

五、为什么 res.text 很难用?

因为它只是一个字符串:

type(res.text)# <class 'str'>

你会遇到这些问题:

  • 不能按 key 取值
  • 不能处理嵌套结构
  • 遇到 HTML 标签只能用字符串 / 正则

📌结论

能用.json(),坚决不用.text


六、多层 JSON 嵌套解析:像“剥洋葱”

以招聘接口为例,典型结构如下:

字典 └── Data(字典) └── Posts(列表) └── 每一项(字典)

取值路径示例:

res_data['Data']['Posts'][0]['RecruitPostName']

📌 两个核心规则:

  • 字典 → 用 key
  • 列表 → 用索引 / for 循环

七、循环解析数据:for vs while

1️⃣ for 循环(最推荐)

forpostinres_data['Data']['Posts']:print(post['RecruitPostName'])

优点:

  • 不用管索引
  • 不会越界
  • 代码简洁、安全

2️⃣ while 循环(需要你非常清醒)

i=0whilei<len(posts):print(posts[i])i+=1

⚠️ 极易犯错:

  • 忘记i += 1
  • 条件写错 → 死循环

八、分页爬取:爬虫的灵魂能力

1️⃣ 固定页数(for 循环)

forpageinrange(1,11):params['pageIndex']=page

缺点:

  • 页数一变,代码就废

2️⃣ 动态分页(while True,企业级写法

page=1whileTrue:params['pageIndex']=page res=requests.get(url,params=params)data=res.json()posts=data['Data']['Posts']ifpostsisNone:breakforpostinposts:print(post['RecruitPostName'])page+=1

📌结束循环的黄金写法

ifnotposts:break

九、请求头 headers:绕过反爬的第一道门

1️⃣ 为什么一定要加 User-Agent?

服务器会判断:

“你是不是浏览器?”

不加请求头 =高概率返回假数据 / 空数据


2️⃣ 正确写法(注意参数名)

headers={"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64)"}res=requests.get(url,headers=headers)

❌ 错误写法:

requests.get(url,headers_dict)# 会被当成 params

十、JSONDecodeError:90% 新手都会遇到

出现原因:

  • 被反爬
  • 返回 HTML 而不是 JSON
  • 请求参数错误

排查思路:

1️⃣ 打印res.text
2️⃣ 对比浏览器响应
3️⃣ 补齐 headers
4️⃣ 降低请求频率


十一、核心思维总结(比代码更重要)

爬虫不是记代码,而是记逻辑

所有网站,套路只有这一套:

1️⃣ 找接口
2️⃣ 发请求
3️⃣ 判断响应类型
4️⃣ 解析数据结构
5️⃣ 设计循环
6️⃣ 处理分页
7️⃣ 控制退出条件

代码会变,逻辑不变


十二、写给初学者的一句话建议

学会一套完整流程,比背 100 段爬虫代码更重要。

如果你把本文内容真正敲一遍、跑一遍,你已经超过80% 的爬虫初学者


📌如果这篇文章对你有帮助,欢迎点赞 + 收藏 + 关注
后续我会继续拆解:
👉 反爬策略
👉 Cookie / Session
👉 字段清洗与存储
👉 企业级爬虫结构设计

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 19:06:48

如何5分钟搞定跨平台音乐解析:一站式快速集成方案

如何5分钟搞定跨平台音乐解析&#xff1a;一站式快速集成方案 【免费下载链接】music-api 各大音乐平台的歌曲播放地址获取接口&#xff0c;包含网易云音乐&#xff0c;qq音乐&#xff0c;酷狗音乐等平台 项目地址: https://gitcode.com/gh_mirrors/mu/music-api 还在为…

作者头像 李华
网站建设 2026/4/1 23:17:58

Winlator:移动设备上的终极Windows应用运行解决方案

Winlator&#xff1a;移动设备上的终极Windows应用运行解决方案 【免费下载链接】winlator Android application for running Windows applications with Wine and Box86/Box64 项目地址: https://gitcode.com/GitHub_Trending/wi/winlator 你是否曾想过在Android手机上…

作者头像 李华
网站建设 2026/4/17 15:25:54

FlutterOpenHarmony商城App商品分类导航组件开发

前言 商品分类导航是商城应用中帮助用户快速定位商品类别的重要组件。一个设计良好的分类导航能够让用户在海量商品中快速找到目标品类&#xff0c;提升购物效率和用户体验。本文将详细介绍如何在Flutter和OpenHarmony平台上开发商品分类导航组件&#xff0c;包括图标式分类入口…

作者头像 李华
网站建设 2026/4/18 2:57:24

WordPress静态化:轻松平衡爬虫与服务器负载

WordPress静态化方案&#xff1a;如何平衡爬虫抓取与服务器负载&#xff1f; 在WordPress网站优化中&#xff0c;静态化是一种常见策略&#xff0c;旨在将动态生成的页面&#xff08;如PHP处理的文章&#xff09;转换为静态HTML文件&#xff0c;从而减少服务器处理负担。然而&a…

作者头像 李华
网站建设 2026/4/16 23:32:32

生物信息学工具数据库下载:3种高效方法快速解决网络连接问题

生物信息学工具数据库下载&#xff1a;3种高效方法快速解决网络连接问题 【免费下载链接】MMseqs2 MMseqs2: ultra fast and sensitive search and clustering suite 项目地址: https://gitcode.com/gh_mirrors/mm/MMseqs2 在生物信息学研究中&#xff0c;数据库下载是每…

作者头像 李华
网站建设 2026/4/11 4:35:12

GRETNA脑网络分析5大核心方法:从数据新手到图论专家

你是否曾经面对复杂的脑网络数据感到手足无措&#xff1f;想要深入理解图论算法却苦于数学公式的艰深&#xff1f;GRETNA作为MATLAB环境下的图论网络分析工具包&#xff0c;正是你突破技术瓶颈的最佳选择。无论你是神经科学研究者还是医学影像分析师&#xff0c;这篇完整指南都…

作者头像 李华