Python 爬虫入门:Requests 库十个小案例实战
前言
网络爬虫(Web Crawler)是自动化抓取互联网信息的重要工具。在 Python 中, 库是最流行的 HTTP 客户端库之一,它简洁、高效且功能强大。本文将通过十个基础案例,带你掌握使用 进行网页爬取的核心技能,包括安装配置、请求方法、参数传递、反爬处理及文件保存等。
本文详细介绍了 Python Requests 库的十个爬虫基础案例,涵盖环境安装、GET/POST/PUT 请求方法、参数传递、Headers 设置、文件保存及图片下载。内容包含代码示例、异常处理、Session 管理及反爬策略,并强调遵守网络伦理与 robots.txt 协议,旨在帮助初学者快速掌握网络爬虫核心技术。

网络爬虫(Web Crawler)是自动化抓取互联网信息的重要工具。在 Python 中, 库是最流行的 HTTP 客户端库之一,它简洁、高效且功能强大。本文将通过十个基础案例,带你掌握使用 进行网页爬取的核心技能,包括安装配置、请求方法、参数传递、反爬处理及文件保存等。
requestsrequests首先确保已安装 Python 环境。推荐使用国内镜像源加速下载。
Windows 用户: 打开命令提示符(CMD),建议以管理员身份运行以避免权限问题。
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
Linux/Mac 用户:
类似 Windows,若遇到权限不足,请在命令前添加 sudo。
sudo pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests
这是最基础的爬虫示例,用于获取百度首页并打印状态码和文本内容。
import requests
# 发起 GET 请求
response = requests.get("http://www.baidu.com")
# 自动识别编码格式,防止中文乱码
response.encoding = response.apparent_encoding
# 输出状态码和内容
print(f"状态码:{response.status_code}")
print(response.text)
说明:status_code 为 200 表示请求成功。apparent_encoding 能根据 HTML 内容自动推断编码,比硬编码更稳健。
使用 httpbin.org 测试 GET 请求的返回结构。
import requests
response = requests.get("http://httpbin.org/get")
print(f"状态码:{response.status_code}")
print(response.text)
POST 通常用于提交表单或 API 数据。
import requests
response = requests.post("http://httpbin.org/post")
print(f"状态码:{response.status_code}")
print(response.text)
PUT 方法常用于更新服务器上的资源。
import requests
response = requests.put("http://httpbin.org/put")
print(f"状态码:{response.status_code}")
print(response.text)
当参数较少时,可直接拼接到 URL 中。
import requests
# 使用 & 连接多个参数
url = "http://httpbin.org/get?name=hezhi&age=20"
response = requests.get(url)
print(f"状态码:{response.status_code}")
print(response.text)
推荐方式,params 参数会自动将字典序列化为查询字符串。
import requests
data = {
"name": "hezhi",
"age": 20
}
response = requests.get("http://httpbin.org/get", params=data)
print(f"状态码:{response.status_code}")
print(response.text)
POST 请求通常使用 data 参数传递表单数据,但此处演示 params 用法。
import requests
data = {
"name": "hezhi",
"age": 20
}
# 注意:POST 通常用 data 参数,这里演示 params 在 POST 中的行为
response = requests.post("http://httpbin.org/post", params=data)
print(f"状态码:{response.status_code}")
print(response.text)
许多网站会检测 User-Agent,未设置头部可能被拒绝访问。
import requests
# 不设置头部
response = requests.get("http://www.zhihu.com")
print(f"第一次访问状态码:{response.status_code}")
# 设置 User-Agent 伪装浏览器
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("http://www.zhihu.com", headers=headers)
print(f"设置头部后状态码:{response.status_code}")
if response.status_code == 200:
print("访问成功")
将响应内容写入文件时,需注意编码格式。
import requests
url = "http://www.baidu.com"
response = requests.get(url)
# 设置编码
response.encoding = "utf-8"
# 保存文件
file_path = "baidu.html"
with open(file_path, "w", encoding="utf-8") as f:
f.write(response.text)
print(f"文件已保存至:{file_path}")
优化:使用 with open 语句可自动关闭文件,无需手动调用 close()。
图片属于二进制数据,需使用 rb 模式或 wb 模式写入。
import requests
url = "https://www.baidu.com/img/baidu_jgylogo3.gif"
response = requests.get(url)
# 以二进制写入模式打开文件
with open("baidu_logo.gif", "wb") as f:
f.write(response.content)
print("图片保存成功")
网络请求可能因超时、断网等原因失败,必须包裹在 try-except 块中。
import requests
from requests.exceptions import Timeout, ConnectionError
try:
response = requests.get("http://example.com", timeout=5)
response.raise_for_status() # 检查 HTTP 错误
except Timeout:
print("请求超时")
except ConnectionError:
print("网络连接错误")
except Exception as e:
print(f"发生未知错误:{e}")
使用 Session 对象可以跨请求保持 Cookie,适合需要登录的场景。
import requests
session = requests.Session()
# 发送请求,Cookie 会被自动保存在 session 中
response = session.get("http://example.com/login")
# 后续请求会自动携带之前的 Cookie
response = session.get("http://example.com/profile")
session.close()
频繁请求可能导致 IP 被封禁,建议使用 time.sleep 控制间隔。
import time
import requests
for i in range(5):
requests.get("http://example.com")
time.sleep(1) # 每次请求间隔 1 秒
本文通过十个实例涵盖了 requests 库的基础用法,从简单的 GET 请求到文件操作及反爬策略。掌握这些知识后,你可以进一步结合 BeautifulSoup 或 lxml 进行数据解析,构建更复杂的爬虫系统。在实际开发中,请务必遵守法律法规,文明爬取。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online