1 Hour Guide一小时指南
剩余:60 min
返回教程列表
💻 编程60 分钟进阶May 2, 2026

1 小时学会 Python 网页抓取

60 分钟构建真正可用的网页抓取工具。从网站提取数据、处理分页、保存到 CSV。不需要任何抓取经验。

#python#scraping#automation#data

读完这篇教程,你将拥有一个能从真实网站提取商品数据并保存为 CSV 的 Python 抓取工具。

🎯 你将构建

一个 Python 脚本:

  • 从网站获取 HTML
  • 提取结构化数据(标题、价格、评分)
  • 处理分页(多个页面)
  • 保存为 CSV

⏱️ 时间分配

010min
安装工具 & 理解 HTML
1025min
第一次抓取:提取单个条目
2540min
提取页面所有条目
4055min
处理分页
5560min
保存为 CSV 并测试

📋 前置要求

第 1 步:安装工具(0–10 分钟)

安装 requests(获取 HTML)和 beautifulsoup4(解析 HTML):

pip install requests beautifulsoup4

测试:

import requests
from bs4 import BeautifulSoup

response = requests.get("https://example.com")
soup = BeautifulSoup(response.text, 'html.parser')
print(soup.title.string)

Checkpoint

应该能打印 Example Domain。如果报 ModuleNotFoundError,重新执行 pip install

第 2 步:理解 HTML 结构(10–15 分钟)

我们抓取 books.toscrape.com(官方练习站)。

在浏览器打开 → 右键点击一本书 → 检查(Inspect)

你会看到:

<article class="product_pod">
  <h3><a href="..." title="A Light in the Attic">A Light in the ...</a></h3>
  <p class="price_color">£51.77</p>
  <p class="star-rating Three">...</p>
</article>

关键选择器:

  • 书名:article.product_pod h3 a
  • 价格:p.price_color
  • 评分:p.star-rating(class 名中包含评分)

第 3 步:提取一个条目(15–25 分钟)

创建 scraper.py

import requests
from bs4 import BeautifulSoup

url = "http://books.toscrape.com/"
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')

# 找第一本书
book = soup.find('article', class_='product_pod')

title = book.h3.a['title']
price = book.find('p', class_='price_color').text
rating_class = book.find('p', class_='star-rating')['class'][1]

print(f"标题: {title}")
print(f"价格: {price}")
print(f"评分: {rating_class}")

运行:

python scraper.py

Checkpoint

应该能看到一本书的标题、价格和评分(例如 "Three")。

第 4 步:提取所有条目(25–40 分钟)

循环遍历页面上所有书:

books = soup.find_all('article', class_='product_pod')

for book in books:
    title = book.h3.a['title']
    price = book.find('p', class_='price_color').text
    rating = book.find('p', class_='star-rating')['class'][1]
    
    print(f"{title} | {price} | {rating}")

Checkpoint

应该能打印 20 本书(一页 20 个条目)。

第 5 步:处理分页(40–55 分钟)

这个网站有"下一页"按钮。我们抓取多页:

import requests
from bs4 import BeautifulSoup

base_url = "http://books.toscrape.com/catalogue/"
page_url = "page-{}.html"
all_books = []

for page_num in range(1, 4):  # 抓 3 页
    if page_num == 1:
        url = "http://books.toscrape.com/"
    else:
        url = base_url + page_url.format(page_num)
    
    print(f"抓取 {url}...")
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'html.parser')
    
    books = soup.find_all('article', class_='product_pod')
    
    for book in books:
        title = book.h3.a['title']
        price = book.find('p', class_='price_color').text.strip('£')
        rating = book.find('p', class_='star-rating')['class'][1]
        
        all_books.append({
            'title': title,
            'price': price,
            'rating': rating
        })

print(f"总共抓取: {len(all_books)} 本书")

Checkpoint

应该看到 总共抓取: 60 本书(3 页 × 20 本)。

第 6 步:保存为 CSV(55–60 分钟)

import csv

# ... (前面的抓取代码) ...

# 保存为 CSV
with open('books.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.DictWriter(f, fieldnames=['title', 'price', 'rating'])
    writer.writeheader()
    writer.writerows(all_books)

print("已保存到 books.csv")

运行:

python scraper.py

用 Excel 或任意文本编辑器打开 books.csv,应该能看到 60 本书!

🎉 你在 60 分钟内构建了一个真正的网页抓取工具!

🎁 加分项

添加延迟(做一个礼貌的抓取者):

import time

for page_num in range(1, 4):
    # ... 抓取代码 ...
    time.sleep(1)  # 每页间隔 1 秒

处理错误:

try:
    response = requests.get(url, timeout=10)
    response.raise_for_status()
except requests.RequestException as e:
    print(f"错误: {e}")
    continue

使用 User-Agent(避免被屏蔽):

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'
}
response = requests.get(url, headers=headers)

📚 下一步

1 小时学会 Python 基础
60 分钟从零开始,写出你的第一个真正可用的 Python 脚本。
60 min
1 小时学会 Docker 基础
60 分钟容器化一个应用。从安装 Docker 到运行自己的容器,再到把镜像推送到 Docker Hub。
60 min

🔗 相关资源

⚠️ 法律提示

抓取前请检查网站的 robots.txt 和服务条款。尊重速率限制,不要过度请求导致服务器负担。