Python 爬虫入门:学会 requests,轻松抓取公开网页数据

关键词:Python / requests / 爬虫入门 / 网页抓取 / HTML / 数据采集

很多人听到“爬虫”两个字就觉得高深莫测:什么反爬、JS 渲染、IP 封禁……其实,80% 的公开数据采集需求,只用 requests 就能解决

本文不讲花活,只讲一件事:如何用 requests 把网页上的数据“搬”下来,并把它变成你能用的结构化数据。


一、什么是 requests?为什么它适合入门?

requests 是 Python 中最常用的 HTTP 请求库,可以理解为:

用代码模拟浏览器访问网页

它的优点非常明显:

  • ✅ API 简洁,像说人话一样写代码

  • ✅ 不需要配置复杂的浏览器环境

  • ✅ 适合抓静态网页(服务器直接返回 HTML)

  • ✅ 学习成本低,10 分钟上手

一句话requests 是爬虫世界的“Hello World”。


二、环境准备

1. 安装 requests

pip install requests

(如果你用的是 Anaconda,通常已内置)

2. 必备辅助库(后面会用到)

pip install beautifulsoup4 lxml
  • beautifulsoup4:解析 HTML

  • lxml:高性能解析器


三、第一个爬虫:抓取一个网页

1. 发送 GET 请求

import requests

url = "https://example.com"
response = requests.get(url)

print(response.status_code)  # 200 表示成功
print(response.text[:500])   # 查看前 500 个字符

2. 常见状态码速查

状态码

含义

200

成功

403

被拒绝(可能反爬)

404

页面不存在

500

服务器错误


四、伪装成浏览器(非常重要)

很多网站会拒绝“非浏览器”的请求。解决办法很简单:加一个 User-Agent

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}

response = requests.get(url, headers=headers)

📌 这是爬虫的第一条军规:永远带上 headers


五、解析网页:从 HTML 中提取数据

拿到 HTML 只是第一步,我们需要从中“抠”出想要的内容。

1. BeautifulSoup 初体验

from bs4 import BeautifulSoup

soup = BeautifulSoup(response.text, "lxml")

title = soup.title.text
print(title)

2. 提取标签内容

查找单个元素
h1 = soup.find("h1").text
查找多个元素
links = soup.find_all("a")

for link in links:
    print(link.get("href"), link.text)

3. 使用 CSS 选择器(强烈推荐)

# 提取 class="price" 的元素
prices = soup.select(".price")

# 提取 ul 下的 li
items = soup.select("ul.items > li")

✅ CSS 选择器和你在浏览器开发者工具里看到的一致,非常好用


六、实战案例:抓取豆瓣读书 Top 250(示例)

⚠️ 仅作学习用途,遵守网站 robots.txt 与访问频率限制

import requests
from bs4 import BeautifulSoup

url = "https://book.douban.com/top250"
headers = {
    "User-Agent": "Mozilla/5.0"
}

resp = requests.get(url, headers=headers)
soup = BeautifulSoup(resp.text, "lxml")

books = soup.select(".item .pl2 a")

for book in books:
    title = book.text.strip().replace("\n", "")
    link = book["href"]
    print(title, link)

🎯 运行后,你将得到一份干净的图书清单。


七、参数化请求:翻页与搜索

1. URL 参数(GET 参数)

params = {
    "q": "python",
    "page": 2
}

response = requests.get(
    "https://www.example.com/search",
    params=params,
    headers=headers
)

print(response.url)
# https://www.example.com/search?q=python&page=2

✅ 不用自己拼 URL,requests 帮你搞定


2. 简单翻页爬虫模板

for page in range(1, 6):
    url = f"https://example.com/list?page={page}"
    resp = requests.get(url, headers=headers)
    # 解析数据

八、异常处理:让爬虫更健壮

1. 捕获请求异常

try:
    resp = requests.get(url, headers=headers, timeout=5)
    resp.raise_for_status()
except requests.exceptions.RequestException as e:
    print("请求失败:", e)

2. 常用参数

requests.get(
    url,
    headers=headers,
    timeout=5,      # 超时时间
    verify=False    # 忽略 SSL 证书(慎用)
)

九、数据存储:别只打印不保存

1. 保存为 CSV(最常用)

import csv

with open("data.csv", "w", newline="", encoding="utf-8-sig") as f:
    writer = csv.writer(f)
    writer.writerow(["标题", "链接"])
    writer.writerow([title, link])

2. 保存为 JSON

import json

data = [{"title": title, "link": link}]
with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

十、爬虫礼仪(非常重要)

合法合规

  • 不抓取隐私数据

  • 遵守网站 robots.txt

  • 不用于商业用途(除非授权)

减轻服务器压力

  • 控制请求频率(time.sleep(1)

  • 不在高峰期疯狂爬取

import time
time.sleep(1)

标识自己

  • 有些网站允许爬虫,建议在 User-Agent 中写明联系方式


十一、requests 的局限 & 下一步

requests 做不到什么?

  • ❌ JavaScript 动态渲染(如 Vue / React 页面)

  • ❌ 复杂登录(验证码、滑块)

  • ❌ 大规模分布式爬取

进阶路线

阶段

技术

入门

requests + BeautifulSoup

动态网页

Selenium / Playwright

高效解析

lxml / XPath

大规模

Scrapy

反爬对抗

IP 代理池 / Session / Cookie


十二、总结

学会 requests,你就已经掌握了爬虫的半壁江山。

你现在已经可以:

  • ✅ 发送 HTTP 请求

  • ✅ 伪装浏览器

  • ✅ 解析 HTML 数据

  • ✅ 批量采集公开网页

  • ✅ 保存为结构化文件

爬虫的本质不是“黑科技”,而是“自动化访问 + 数据提取”

当你第一次用十几行代码,把一个需要手工复制半小时的网页数据一键抓下来时,那种爽感,就是编程的意义之一。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐