Python爬虫Requests库5种常见HTTP请求实战:GET/POST/Header/代理/超时

📅 2026/7/9 18:27:46
Python爬虫Requests库5种常见HTTP请求实战:GET/POST/Header/代理/超时
Python爬虫Requests库5种核心HTTP请求实战指南1. 初识Requests库Python爬虫的瑞士军刀在数据驱动的时代网络爬虫已成为获取信息的重要工具。Python中的Requests库凭借其简洁优雅的API设计成为处理HTTP请求的标杆级工具。与Python内置的urllib相比Requests在易用性和功能完整性上具有明显优势人性化设计API直观易记无需处理繁琐的连接管理自动编码处理智能识别响应内容编码告别乱码困扰完善的安全支持简化HTTPS验证流程内置SSL证书验证连接保持支持HTTP持久连接提升请求效率安装Requests只需一行命令pip install requests基础GET请求示例import requests response requests.get(https://api.example.com/data) print(response.status_code) # 200 print(response.text[:100]) # 查看前100个字符2. GET请求深度解析与实战技巧2.1 基础GET请求与参数传递GET请求是获取数据的标准方法Requests使其变得异常简单# 带查询参数的GET请求 params {key1: value1, key2: [value2, value3]} response requests.get(https://httpbin.org/get, paramsparams) print(response.url) # 查看最终请求URL # 输出https://httpbin.org/get?key1value1key2value2key2value32.2 高级GET请求处理处理JSON响应# 自动解析JSON响应 response requests.get(https://api.github.com/events) data response.json() # 直接转换为Python对象 print(data[0][type]) # 访问JSON数据流式处理大响应# 处理大文件下载 with requests.get(https://example.com/large-file, streamTrue) as r: with open(large_file, wb) as f: for chunk in r.iter_content(chunk_size8192): if chunk: # 过滤keep-alive新块 f.write(chunk)自定义请求行为# 设置请求超时连接超时5秒读取超时30秒 try: response requests.get(https://example.com, timeout(5, 30)) except requests.exceptions.Timeout: print(请求超时请重试)3. POST请求全面指南3.1 基础表单提交# 表单数据提交 payload {key1: value1, key2: value2} response requests.post(https://httpbin.org/post, datapayload) print(response.json()[form]) # 查看服务器接收的表单数据3.2 JSON数据提交# JSON数据提交 import json payload {some: data} response requests.post(https://api.example.com/post, jsonpayload) # 自动序列化为JSON print(response.request.headers[Content-Type]) # application/json3.3 文件上传实战# 多文件上传 files { image: (image.jpg, open(image.jpg, rb), image/jpeg), document: (report.pdf, open(report.pdf, rb)) } response requests.post(https://httpbin.org/post, filesfiles) print(response.json()[files]) # 查看上传的文件信息4. 请求头定制与反爬应对策略4.1 自定义请求头headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64), Accept-Language: en-US,en;q0.9, Referer: https://example.com } response requests.get(https://httpbin.org/headers, headersheaders) print(response.json()[headers]) # 查看服务器接收到的请求头4.2 常见反爬措施应对模拟浏览器行为browser_headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36, Accept: text/html,application/xhtmlxml,application/xml;q0.9, Accept-Encoding: gzip, deflate, br, Connection: keep-alive } response requests.get(https://example.com, headersbrowser_headers)处理Cookie# 自动处理Cookie session requests.Session() response session.get(https://example.com/login) # 后续请求会自动携带Cookie response session.get(https://example.com/dashboard)5. 高级网络配置代理与超时5.1 代理服务器配置proxies { http: http://10.10.1.10:3128, https: http://10.10.1.10:1080, } response requests.get(https://httpbin.org/ip, proxiesproxies) print(response.json()) # 显示代理服务器的IP5.2 精细化超时控制# 分阶段超时设置 try: response requests.get(https://example.com, timeout( 3.05, # 连接超时 27 # 读取超时 )) except requests.exceptions.ConnectTimeout: print(连接服务器超时) except requests.exceptions.ReadTimeout: print(服务器响应超时)5.3 重试机制实现from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry session requests.Session() retries Retry( total3, # 总重试次数 backoff_factor1, # 指数退避因子 status_forcelist[500, 502, 503, 504] # 遇到这些状态码会重试 ) session.mount(http://, HTTPAdapter(max_retriesretries)) session.mount(https://, HTTPAdapter(max_retriesretries)) response session.get(https://example.com)6. 实战场景对比与决策指南不同HTTP请求场景的适用性对比场景特征推荐方法参数示例注意事项获取公开数据GETparams{page: 1}注意URL长度限制提交表单数据POSTdata{user: name}内容类型为表单提交复杂JSONPOST-JSONjson{query: text}自动设置Content-Type文件上传POST-Multipartfiles{file: open()}注意内存使用需要保持会话Sessionsession requests.Session()跨请求保持Cookie高延迟网络环境增加超时timeout(10, 30)区分连接/读取超时需要绕过限制使用代理proxies{http: ...}注意代理可靠性7. 安全与最佳实践HTTPS验证# 严格SSL证书验证默认开启 response requests.get(https://example.com, verifyTrue) # 本地证书验证生产环境推荐 response requests.get(https://example.com, verify/path/to/certfile.pem)认证处理# 基础认证 from requests.auth import HTTPBasicAuth response requests.get(https://api.example.com, authHTTPBasicAuth(user, pass)) # 更简洁的写法 response requests.get(https://api.example.com, auth(user, pass))性能优化建议复用TCP连接使用Session对象启用响应压缩添加Accept-Encoding: gzip头合理设置超时避免长时间阻塞异步请求对于高并发场景考虑aiohttp# 使用Session提升性能 with requests.Session() as session: session.headers.update({User-Agent: MyBot/1.0}) for url in [https://example.com/1, https://example.com/2]: response session.get(url) print(response.status_code)掌握这些Requests库的高级用法后你将能够应对绝大多数网络爬虫开发中的HTTP请求场景。在实际项目中建议结合具体需求选择合适的请求方式并始终注意遵守目标网站的robots.txt规则和服务条款。