2026/6/10 22:14:37
网站建设
项目流程
静态网站开发基础,安徽蚌埠怀远县建设局网站,东莞住建局备案查询,有没有专门做字体排版设的网站前言
在 Python 爬虫开发中#xff0c;HTTP 请求是与目标网站交互的核心环节#xff0c;而requests库凭借其简洁易用、功能强大的特性#xff0c;成为处理 HTTP 请求的首选工具。相较于 Python 内置的urllib库#xff0c;requests极大简化了请求构造、响应处理、Cookie 管…前言在 Python 爬虫开发中HTTP 请求是与目标网站交互的核心环节而requests库凭借其简洁易用、功能强大的特性成为处理 HTTP 请求的首选工具。相较于 Python 内置的urllib库requests极大简化了请求构造、响应处理、Cookie 管理等操作降低了爬虫开发的门槛。本文将深入剖析requests库的核心用法重点讲解 GET 和 POST 两种最常用请求方式的实现原理、参数配置及实战场景帮助开发者精准掌握请求发送的关键技巧解决爬虫开发中常见的请求异常问题。摘要本文以「HTTP 测试工具网站」读者可直接点击链接进行请求测试为实战验证平台系统讲解requests库的安装与基础配置详细拆解 GET 请求带参数 / 不带参数、请求头配置和 POST 请求表单数据、JSON 数据、文件上传的实现方式结合完整代码案例、输出结果及原理分析让读者透彻理解不同请求方式的适用场景同时掌握请求异常处理、Cookie 管理、会话保持等进阶技巧为爬虫开发中灵活应对各类网站的请求要求奠定基础。一、requests 库基础认知1.1 核心优势requests库是基于 Python 的 HTTP 客户端库遵循 RESTful 设计风格核心优势如下语法简洁仅需几行代码即可完成复杂 HTTP 请求原生支持 HTTPS、连接池、Cookie、会话保持等功能完善的异常处理机制便于排查请求错误支持多种请求参数格式表单、JSON、文件等。1.2 安装与环境验证安装命令bash运行pip install requests环境验证代码python运行import requests # 打印库版本验证安装成功 print(requests库版本, requests.__version__) # 发送简单GET请求验证可用性 response requests.get(https://httpbin.org/get) print(请求状态码, response.status_code)输出结果plaintextrequests库版本 2.31.0 请求状态码 200原理说明通过打印库版本确认安装成功发送基础 GET 请求至测试网站状态码 200 表示请求成功验证requests库可正常调用。二、HTTP 请求核心概念2.1 请求方法分类HTTP 协议定义了多种请求方法爬虫开发中最常用的两种请求方法核心用途数据传递方式GET获取服务器资源如网页、数据数据拼接在 URL 后查询参数POST向服务器提交数据如表单提交数据放在请求体中2.2 请求核心参数无论 GET 还是 POST 请求核心参数均包含以下几类url目标请求地址headers请求头模拟浏览器、携带认证信息等params/data/json请求参数不同格式适配不同场景cookies携带 Cookie 信息timeout请求超时时间proxies代理 IP 配置。三、GET 请求实战详解3.1 基础 GET 请求无参数代码实现python运行import requests # 1. 配置请求头模拟浏览器 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } # 2. 发送GET请求 url https://httpbin.org/get response requests.get(url, headersheaders, timeout10) # 3. 响应处理 print( 基础GET请求响应结果 ) print(状态码, response.status_code) print(响应头, response.headers) print(响应内容JSON格式, response.json())输出结果plaintext 基础GET请求响应结果 状态码 200 响应头 {Date: Wed, 17 Dec 2025 08:00:00 GMT, Content-Type: application/json, Content-Length: 268, Connection: keep-alive, Server: gunicorn/19.9.0, Access-Control-Allow-Origin: *, Access-Control-Allow-Credentials: true} 响应内容JSON格式 { args: {}, headers: { Accept: */*, Accept-Encoding: gzip, deflate, Host: httpbin.org, User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, X-Amzn-Trace-Id: Root1-6763a000-1234567890abcdef12345678 }, origin: 123.123.123.123, url: https://httpbin.org/get }原理分析requests.get()方法发送 GET 请求headers参数传递浏览器标识避免被服务器识别为爬虫response.status_code获取响应状态码200 表示请求成功response.headers返回响应头字典包含服务器类型、内容格式等信息response.json()将 JSON 格式的响应内容解析为 Python 字典简化数据提取。3.2 带参数的 GET 请求场景说明爬取需要筛选条件的页面如电商网站按价格 / 分类筛选商品参数需拼接在 URL 后格式为url?key1value1key2value2。代码实现python运行import requests headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } # 定义请求参数 params { name: Python爬虫, age: 18, page: 1 } # 发送带参数的GET请求 url https://httpbin.org/get response requests.get(url, headersheaders, paramsparams, timeout10) # 响应处理 print( 带参数GET请求响应结果 ) print(最终请求URL, response.url) print(响应内容JSON, response.json())输出结果plaintext 带参数GET请求响应结果 最终请求URL https://httpbin.org/get?namePython%E7%88%AC%E8%99%ABage18page1 响应内容JSON { args: { age: 18, name: Python爬虫, page: 1 }, headers: { Accept: */*, Accept-Encoding: gzip, deflate, Host: httpbin.org, User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, X-Amzn-Trace-Id: Root1-6763a100-1234567890abcdef12345678 }, origin: 123.123.123.123, url: https://httpbin.org/get?namePython%E7%88%AC%E8%99%ABage18page1 }原理分析params参数接收字典格式的请求参数requests会自动将其编码并拼接至 URL 后中文参数如 “Python 爬虫”会被自动 URL 编码%E7%88%AC%E8%99%AB避免编码错误response.url可查看最终拼接后的 URL便于验证参数是否正确传递。四、POST 请求实战详解4.1 表单格式的 POST 请求场景说明模拟用户登录、表单提交等场景数据以application/x-www-form-urlencoded格式传递网页表单默认提交格式。代码实现python运行import requests headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Content-Type: application/x-www-form-urlencoded # 指定表单格式 } # 定义表单数据 form_data { username: test_user, password: test_pass123, remember: true } # 发送POST请求 url https://httpbin.org/post response requests.post(url, headersheaders, dataform_data, timeout10) # 响应处理 print( 表单格式POST请求响应结果 ) print(状态码, response.status_code) print(提交的表单数据, response.json()[form])输出结果plaintext 表单格式POST请求响应结果 状态码 200 提交的表单数据 { password: test_pass123, remember: true, username: test_user }原理分析requests.post()方法发送 POST 请求data参数传递表单数据字典格式Content-Type请求头指定数据格式为表单确保服务器正确解析响应结果中form字段对应提交的表单数据验证数据已成功传递。4.2 JSON 格式的 POST 请求场景说明对接 RESTful API 接口时数据通常以 JSON 格式传递application/json如爬取接口返回的结构化数据。代码实现python运行import requests headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36, Content-Type: application/json # 指定JSON格式 } # 定义JSON数据 json_data { user_info: { id: 1001, name: 爬虫开发者, skills: [Python, requests, BeautifulSoup] }, action: query } # 发送JSON格式POST请求 url https://httpbin.org/post response requests.post(url, headersheaders, jsonjson_data, timeout10) # 响应处理 print( JSON格式POST请求响应结果 ) print(提交的JSON数据, response.json()[json])输出结果plaintext JSON格式POST请求响应结果 提交的JSON数据 { action: query, user_info: { id: 1001, name: 爬虫开发者, skills: [ Python, requests, BeautifulSoup ] } }原理分析json参数接收 Python 字典requests会自动将其序列化为 JSON 字符串并设置Content-Type为application/json即使手动指定也会覆盖相较于datajson.dumps(json_data)json参数更简洁无需手动序列化。4.3 文件上传的 POST 请求场景说明模拟文件上传场景如爬虫需上传文件后获取数据requests支持多文件上传。代码实现python运行import requests headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } # 构造文件数据需提前创建test.txt文件 files { file1: (test.txt, open(test.txt, rb), text/plain) # 文件名、文件对象、文件类型 } # 发送文件上传POST请求 url https://httpbin.org/post response requests.post(url, headersheaders, filesfiles, timeout10) # 响应处理 print( 文件上传POST请求响应结果 ) print(上传的文件信息, response.json()[files]) # 关闭文件对象 files[file1][1].close()输出结果test.txt 内容为 “Python requests 实战”plaintext 文件上传POST请求响应结果 上传的文件信息 { file1: Python requests 实战 }原理分析files参数接收字典键为表单字段名值为元组文件名、文件二进制对象、文件 MIME 类型需以rb模式打开文件确保二进制传输上传完成后需关闭文件对象避免资源泄露。五、requests 进阶技巧5.1 会话保持Session场景说明爬取需要登录后访问的页面使用Session可保持 Cookie避免重复登录。代码实现python运行import requests # 创建会话对象 session requests.Session() headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } # 第一步登录模拟提交登录表单 login_url https://httpbin.org/post login_data {username: test, password: 123456} session.post(login_url, headersheaders, datalogin_data) # 第二步访问需要登录的页面会话保持Cookie target_url https://httpbin.org/cookies response session.get(target_url, headersheaders) print( 会话保持响应结果 ) print(当前Cookie, response.json()[cookies]) # 关闭会话 session.close()原理分析Session对象会自动保存请求过程中的 Cookie后续请求自动携带相较于多次调用requests.get()/post()Session减少 TCP 连接建立次数提升请求效率。5.2 异常处理代码实现通用异常捕获python运行import requests from requests.exceptions import RequestException, HTTPError, Timeout, ConnectionError def send_request(url, methodGET, dataNone, jsonNone): headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 } try: if method.upper() GET: response requests.get(url, headersheaders, timeout10) elif method.upper() POST: response requests.post(url, headersheaders, datadata, jsonjson, timeout10) else: raise ValueError(不支持的请求方法) response.raise_for_status() # 抛出HTTP错误4xx/5xx return response except HTTPError as e: print(fHTTP错误{e.response.status_code} - {e}) except Timeout as e: print(f请求超时{e}) except ConnectionError as e: print(f连接错误{e}) except RequestException as e: print(f请求异常{e}) except Exception as e: print(f未知异常{e}) return None # 测试异常处理 response send_request(https://httpbin.org/status/404, methodGET)输出结果plaintextHTTP错误404 - 404 Client Error: NOT FOUND for url: https://httpbin.org/status/404原理分析捕获requests库特定异常HTTPError/Timeout/ConnectionError精准定位问题response.raise_for_status()主动触发 HTTP 错误异常避免忽略 4xx/5xx 状态码通用RequestException捕获所有请求相关异常兜底处理。六、常见问题与解决方案问题现象原因分析解决方案请求返回 403 Forbidden无请求头 / 请求头不完整配置完整的 User-Agent必要时添加 Referer、Accept 等请求头JSON 解析失败响应内容非 JSON 格式先通过response.text查看响应内容确认格式后再选择解析方式中文参数乱码手动拼接 URL 未编码使用params参数自动编码或手动调用urllib.parse.quote()编码中文文件上传失败文件路径错误 / 文件未以 rb 打开检查文件路径确保以二进制模式打开文件会话保持失效Cookie 未正确保存使用Session对象统一管理请求避免多次创建新的 Session七、总结本文系统讲解了requests库的核心用法从基础的 GET/POST 请求发送到表单、JSON、文件等不同参数格式的传递再到会话保持、异常处理等进阶技巧结合实战案例和原理分析全面覆盖了爬虫开发中 HTTP 请求的关键场景。requests库的核心价值在于简化 HTTP 请求的开发复杂度开发者无需关注底层的 TCP 连接、数据编码等细节只需聚焦业务逻辑即可。在实际爬虫开发中需根据目标网站的请求方式可通过浏览器开发者工具的 Network 面板分析选择对应的请求方法合理配置请求头和参数同时做好异常处理和合规控制如控制请求频率、遵守 robots 协议。掌握requests库是 Python 爬虫开发的基础后续结合 BeautifulSoup、XPath 等解析工具即可完成从请求发送到数据提取的完整爬虫流程。下一篇文章将重点讲解 BeautifulSoup 库的 HTML 解析技巧进一步完善爬虫开发的核心技能体系。