Python 爬虫入门终极指南(菜鸟教程)
你好,未来的爬虫大师!欢迎来到 Python 爬虫的世界,这份教程将带你从零开始,轻松入门,让你能自信地抓取互联网上的数据。

目录
- 什么是爬虫?
- 准备工作:安装 Python 和库
- 第一步:发送你的第一个 HTTP 请求
- 第二步:解析网页内容(HTML)
- 第三步:提取你需要的数据
- 第四步:存储数据(保存到文件)
- 完整代码示例:抓取“名言网”
- 爬虫进阶与注意事项
- 总结与学习资源
什么是爬虫?
想象一下,互联网是一个巨大的图书馆,里面有数不清的书籍(网页),你不可能一本一本地去找你需要的信息。
爬虫(Web Crawler / Spider) 就像一个不知疲倦的机器人图书管理员,它可以:
- 访问 图书馆(服务器)。
- 浏览 书架(网页列表)。
- 翻开 一本书(获取网页内容)。
- 阅读 并摘抄 你需要的段落(提取数据)。
- 把摘抄的内容整理成一份报告(存储数据)。
在 Python 中,我们用代码来指挥这个“机器人”。
准备工作:安装 Python 和库
在开始之前,你需要两样东西:

a) Python 如果你还没有安装 Python,请先去 Python 官网 下载并安装,安装时,请务必勾选 "Add Python to PATH" 选项,这样你才能在命令行中使用它。
b) 必要的库 我们需要两个强大的库来帮助我们:
requests: 用来向网站发送请求,获取网页内容,就像爬虫的“眼睛”和“手”。BeautifulSoup: 用来解析网页内容,方便地提取数据,就像爬虫的“大脑”,用来理解和分析看到的“书”。
打开你的命令行(Windows 是 cmd 或 PowerShell,Mac/Linux 是 Terminal),输入以下命令来安装它们:
pip install requests pip install beautifulsoup4
第一步:发送你的第一个 HTTP 请求
我们的目标是获取一个网页的 HTML 内容,这里我们用一个非常简单的测试网站:http://books.toscrape.com/ (一个专门用来练习爬虫的网站)。

创建一个名为 scraper.py 的文件,然后输入以下代码:
# scraper.py
import requests
# 1. 定义你想要爬取的网址
url = 'http://books.toscrape.com/'
# 2. 使用 requests.get() 发送 GET 请求
try:
response = requests.get(url)
# 3. 检查请求是否成功 (状态码 200 表示成功)
response.raise_for_status() # 如果请求失败 (404, 500), 这会抛出一个异常
# 4. 打印获取到的网页内容 (前 500 个字符)
print("成功获取网页内容!")
print("网页内容预览:")
print(response.text[:500])
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
运行代码:
在命令行中,进入 scraper.py 所在的目录,然后运行:
python scraper.py
你应该会看到:
屏幕上会打印出 http://books.toscrape.com/ 这个网站首页的 HTML 代码的前 500 个字符,恭喜!你已经成功获取了你的第一个网页!
第二步:解析网页内容(HTML)
直接看一大坨 HTML 代码很头疼。BeautifulSoup 可以帮我们把这段代码变成一个结构化的对象,让我们能轻松地找到想要的元素。
# scraper.py (更新版)
import requests
from bs4 import BeautifulSoup # 导入 BeautifulSoup
url = 'http://books.toscrape.com/'
try:
response = requests.get(url)
response.raise_for_status()
# 使用 BeautifulSoup 解析 HTML
# 'html.parser' 是 Python 内置的解析器
soup = BeautifulSoup(response.text, 'html.parser')
# 现在我们可以用 soup 对象来“导航”这个网页了
# 我们可以找到网页的标题
page_title = soup.title.string
print(f"网页标题是: {page_title}")
# 找到所有书籍的 article 标签
books = soup.find_all('article', class_='product_pod')
print(f"在页面上找到了 {len(books)} 本书。")
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
关键点:
BeautifulSoup(response.text, 'html.parser'): 将requests获取的文本内容转换成一个soup对象。soup.title: 获取<title>.string: 获取<title>标签里的文本内容。soup.find_all(): 查找所有符合条件的标签,这是最常用的方法之一。'article': 查找所有<article>class_='product_pod': 查找 class 属性为product_pod的标签,注意,class是 Python 的关键字,所以这里用class_。
第三步:提取你需要的数据
现在我们知道如何找到所有的书籍了,下一步是从每一本书的信息中提取出书名和价格。
观察一下 http://books.toscrape.com/ 的结构,你会发现每本书都在一个 <article class="product_pod"> 里。
- 书名在
<h3>标签下的<a>标签的title属性里。 - 价格在
<p class="price_color">标签里。
让我们更新代码:
# scraper.py (最终版)
import requests
from bs4 import BeautifulSoup
url = 'http://books.toscrape.com/'
try:
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
books = soup.find_all('article', class_='product_pod')
print(f"正在处理 {len(books)} 本书...")
for book in books:
# 提取书名
# 找到 h3 标签,再找到其下的 a 标签,然后获取 'title' 属性
title = book.h3.a['title']
# 提取价格
# 找到 class_='price_color' 的 p 标签,然后获取其文本内容
price = book.find('p', class_='price_color').text
print(f"书名: {title}")
print(f"价格: {price}")
print("-" * 30) # 打印一个分隔线
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
运行代码: 现在你会看到,程序逐行打印出每本书的书名和价格,这就是爬虫的核心逻辑!
第四步:存储数据(保存到文件)
打印在屏幕上数据会消失,我们通常需要将数据保存下来,比如保存到一个 CSV 文件中,这样可以用 Excel 打开。
我们需要一个新库:csv,这个库是 Python 自带的,不需要额外安装。
# scraper.py (存储数据版)
import requests
from bs4 import BeautifulSoup
import csv # 导入 csv 库
url = 'http://books.toscrape.com/'
# 准备一个列表来存储所有书籍信息
all_books_data = []
try:
response = requests.get(url)
response.raise_for_status()
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
# 将每本书的信息作为一个字典存入列表
all_books_data.append({
'title': title,
'price': price
})
# 将数据写入 CSV 文件
# newline='' 是为了防止在 Windows 系统下写入时出现空行
with open('books.csv', 'w', newline='', encoding='utf-8') as f:
# 定义 CSV 文件的列名
fieldnames = ['title', 'price']
writer = csv.DictWriter(f, fieldnames=fieldnames)
# 写入表头
writer.writeheader()
# 写入数据
writer.writerows(all_books_data)
print("数据已成功保存到 books.csv 文件中!")
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
运行代码后:
你会发现在你的代码目录下多了一个 books.csv 文件,用 Excel 打开它,你会看到整齐的书名和价格数据。
完整代码示例:抓取“名言网”
让我们用学到的知识,抓取一个简单的网站:http://quotes.toscrape.com/ (一个专门练习爬取名言的网站)。
目标:获取页面上所有的名言和其作者。
# quotes_scraper.py
import requests
from bs4 import BeautifulSoup
url = 'http://quotes.toscrape.com/'
all_quotes = []
try:
# 1. 发送请求
response = requests.get(url)
response.raise_for_status()
# 2. 解析内容
soup = BeautifulSoup(response.text, 'html.parser')
# 3. 查找所有名言容器
quotes = soup.find_all('div', class_='quote')
# 4. 遍历并提取数据
for quote in quotes:
# 提取名言文本
text = quote.find('span', class_='text').text
# 提取作者
author = quote.find('small', class_='author').text
all_quotes.append({'text': text, 'author': author})
# 5. 打印结果
for q in all_quotes:
print(f'"{q["text"]}" - {q["author"]}')
except requests.exceptions.RequestException as e:
print(f"请求失败: {e}")
爬虫进阶与注意事项
恭喜你,你已经掌握了爬虫的基础!但真实世界更复杂,下面是一些重要的进阶知识和注意事项:
-
反爬机制:
- User-Agent (用户代理):很多网站会检查请求的来源,我们可以伪装成浏览器。
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'} response = requests.get(url, headers=headers) - IP 封禁:如果你在短时间内发送大量请求,你的 IP 可能会被封禁,解决方案是使用代理 IP。
- 验证码:网站可能会弹出验证码,让你证明自己是人类,处理验证码比较复杂,有时需要借助第三方服务。
- User-Agent (用户代理):很多网站会检查请求的来源,我们可以伪装成浏览器。
-
动态网页:
- 有些网站内容是通过 JavaScript 动态加载的,
requests只能获取到初始的 HTML,看不到动态加载的内容,这时你需要使用更强大的工具,如 Selenium 或 Playwright,它们可以模拟一个真实的浏览器。
- 有些网站内容是通过 JavaScript 动态加载的,
-
遵守
robots.txt:- 在访问一个网站前,最好先看看它的
robots.txt文件(https://www.example.com/robots.txt),这个文件规定了哪些页面可以爬,哪些不可以,尊重规则是爬虫工程师的基本素养。
- 在访问一个网站前,最好先看看它的
-
数据存储:
- 除了 CSV,你还可以将数据保存到 JSON 文件,或者存入 数据库(如 SQLite, MySQL, MongoDB)中。
总结与学习资源
一个简单的爬虫流程就是:
- 明确目标:你想抓取哪个网站,什么数据?
- 分析网页:用浏览器开发者工具 (F12) 查看目标数据的 HTML 结构。
- 发送请求:使用
requests库获取网页内容。 - :使用
BeautifulSoup库解析 HTML,定位到数据所在的标签。 - 提取数据:从定位到的标签中,提取出你想要的文本或属性。
- 存储数据:将提取的数据保存到文件或数据库中。
继续学习的资源:
- 官方文档:
- 练习网站:
- Scrapinghub: 提供很多练习项目。
- ToScrape: 我们刚才用过的网站。
- 进阶库:
- Selenium: 用于处理动态网页。
- Scrapy: 一个功能强大的爬虫框架,适合构建大型、复杂的爬虫项目。
- pandas: 用于数据处理和分析,可以轻松地将数据导入 DataFrame。
爬虫的世界非常广阔,充满了挑战和乐趣,从今天开始,动手去探索吧!遇到问题多搜索,多实践,你很快就能成为爬虫高手。
