跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python Requests 爬虫入门实战:GET/POST 请求与反爬绕过

介绍使用 Python requests 库进行网络爬虫的基础操作,涵盖 GET 与 POST 请求方法、参数传递、响应对象处理及文件保存。同时讲解如何通过设置 User-Agent 头部信息绕过基础反爬机制,并补充了异常处理、Session 会话管理及基本的 HTML 解析技巧,帮助开发者构建稳健的数据采集脚本。

星河入梦发布于 2025/2/7更新于 2026/7/934 浏览
Python Requests 爬虫入门实战:GET/POST 请求与反爬绕过

Python Requests 爬虫入门实战

本文介绍使用 Python requests 库进行网络爬虫的基础操作,涵盖 GET 与 POST 请求方法、参数传递、响应对象处理及文件保存。同时讲解如何通过设置 User-Agent 头部信息绕过基础反爬机制,并补充了异常处理、Session 会话管理及基本的 HTML 解析技巧。

1. 环境准备

首先确保已安装 Python 3.x 环境,并通过 pip 安装 requests 库:

pip install requests

若需解析 HTML 内容,建议额外安装 BeautifulSoup4:

pip install beautifulsoup4

2. 基础请求:GET 与 POST

2.1 GET 请求示例

发送 GET 请求获取网页内容,并处理编码问题。

import requests

url = "http://www.baidu.com"
response = requests.get(url)

# 自动识别编码或手动指定
response.encoding = response.apparent_encoding

print(f"状态码:{response.status_code}")
print(f"响应文本长度:{len(response.text)}")

2.2 POST 请求示例

向服务器提交数据通常使用 POST 方法。

import requests

url = "http://httpbin.org/post"
data = {
    "key": "value",
    "number": 123
}

response = requests.post(url, data=data)
print(f"状态码:{response.status_code}")
print(response.text)

3. 参数传递与 Headers

3.1 URL 传参

在 GET 请求中,可以通过字典形式传递参数,库会自动拼接 URL。

import requests

params = {"name": "hezhi", "age": 20}
response = requests.get("http://httpbin.org/get", params=params)
print(response.url)  # 查看实际请求的完整 URL

3.2 设置请求头(Headers)

许多网站会检查 User-Agent 来区分浏览器和爬虫。伪造浏览器头部是绕过基础反爬的关键。

import requests

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36"
}

response = requests.get("https://www.zhihu.com", headers=headers)
print(f"状态码:{response.status_code}")

4. 响应数据处理与文件保存

4.1 文本与二进制

  • response.text: 返回解码后的字符串。
  • response.content: 返回原始字节流,适合保存图片或文件。

4.2 保存图片示例

import requests

url = "https://www.baidu.com/img/baidu_jgylogo3.gif"
response = requests.get(url)

if response.status_code == 200:
    with open("baidu_logo.gif", "wb") as f:
        f.write(response.content)
    print("图片保存成功")
else:
    print("下载失败")

5. 进阶技巧

5.1 Session 对象管理 Cookie

对于需要登录或多步骤交互的网站,使用 Session 可以保持 Cookie 状态。

import requests

session = requests.Session()
headers = {"User-Agent": "Mozilla/5.0..."}  # 自定义 UA

# 第一步:获取登录页,携带 Cookie
resp1 = session.get("https://example.com/login", headers=headers)
cookies = resp1.cookies

# 第二步:提交登录表单
login_data = {"username": "user", "password": "pass"}
session.post("https://example.com/login", data=login_data, cookies=cookies)

# 第三步:访问受保护页面
profile = session.get("https://example.com/profile")
print(profile.text)

5.2 异常处理

网络请求不稳定,必须加入异常捕获。

import requests
from requests.exceptions import Timeout, ConnectionError

try:
    response = requests.get("http://www.baidu.com", timeout=5)
    response.raise_for_status()  # 如果状态码不是 200,抛出 HTTPError
except Timeout:
    print("请求超时")
except ConnectionError:
    print("网络连接错误")
except Exception as e:
    print(f"发生未知错误:{e}")

5.3 简单的 HTML 解析

使用 BeautifulSoup 提取特定标签内容。

from bs4 import BeautifulSoup

html_doc = """
<html><head><title>Sample</title></head>
<body><p id="notice">Notice!</p></body></html>
"""

soup = BeautifulSoup(html_doc, 'lxml')
print(soup.title.string)  # 输出:Sample
print(soup.p['id'])       # 输出:notice

6. 法律与道德规范

编写爬虫时请遵守相关法律法规及目标网站的 robots.txt 协议。避免高频请求导致对方服务器压力过大,严禁抓取个人隐私数据或用于非法用途。技术应当服务于合法合规的场景。

7. 总结

通过本教程,我们掌握了 requests 库的核心用法,包括基础请求、参数构造、头部伪装、文件读写以及 Session 管理。在实际开发中,还需结合代理 IP、验证码识别等技术应对更复杂的反爬策略。

目录

  1. Python Requests 爬虫入门实战
  2. 1. 环境准备
  3. 2. 基础请求:GET 与 POST
  4. 2.1 GET 请求示例
  5. 自动识别编码或手动指定
  6. 2.2 POST 请求示例
  7. 3. 参数传递与 Headers
  8. 3.1 URL 传参
  9. 3.2 设置请求头(Headers)
  10. 4. 响应数据处理与文件保存
  11. 4.1 文本与二进制
  12. 4.2 保存图片示例
  13. 5. 进阶技巧
  14. 5.1 Session 对象管理 Cookie
  15. 第一步:获取登录页,携带 Cookie
  16. 第二步:提交登录表单
  17. 第三步:访问受保护页面
  18. 5.2 异常处理
  19. 5.3 简单的 HTML 解析
  20. 6. 法律与道德规范
  21. 7. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Docker 安装指南与核心概念解析
  • 企业级黑词分析组件:双面板交互与进度监控实现
  • ToClaw 实测:不止炫技,更是易用的桌面 AI 助手
  • 前端 API 设计最佳实践:构建优雅的接口规范
  • Web 自动化测试入门:从概念到百度搜索实战
  • HTML5 结合 AI 实现智能场景渲染与应用
  • 快速排序核心原理与多版本实现详解
  • Spring MVC 快速入门:响应处理与基础实战
  • OpenClaw 跨平台安装指南:Windows 与 Ubuntu
  • Llama-AVSR 论文精读:基于 LLM 的视听语音识别新框架
  • 16 种新型 RAG 技术最新进展与架构创新详解
  • Python 编程入门与进阶指南
  • C++ 输入输出操作详解:从基础到高级实践
  • 医疗连续体机器人模块化控制界面设计与 Python 库应用(下)
  • 使用 MCP 封装火山即梦 API 搭建 AI 绘画服务
  • 算法实战:Z 字形变换与外观数列模拟解法
  • C++ 实现 MATLAB poly 函数:基于根求系数与特征多项式思路
  • 无人机飞行空域申请全流程指南
  • Pi0 机器人大模型在昇腾 A2 平台上的部署与性能测评
  • 华南理工大学开源中文主动健康大模型扁鹊(BianQue)

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online