Python 爬虫入门教程
Python 爬虫是利用代码自动获取网页数据的技术,广泛用于数据采集、信息监控等场景。本教程基于你已掌握的 Python 基础,从工具准备到实战案例,带你一步步学会简单爬虫开发,避开常见坑点。
一、爬虫基础认知:先搞懂 “为什么能爬”
-
爬虫原理
网页本质是 HTML 代码构成的文本文件,浏览器能将代码渲染成可视化页面,而爬虫就是模拟浏览器,向目标网站发送请求、接收 HTML 响应,再从响应中提取需要的数据(如文字、图片链接)。
注意:爬取前需遵守网站
robots协议(访问网站域名 +/robots.txt查看,如https://www.baidu.com/robots.txt),禁止爬取标注 “禁止” 的内容,避免法律风险。 -
必备工具与库
基于 Python 基础,需安装 3 个核心库,安装方式用入门教程学过的
pip命令(Windows 打开 cmd、mac 打开终端):
-
requests:发送网页请求,获取 HTML 数据,安装命令:
pip install requests -
BeautifulSoup4:解析 HTML 代码,提取目标数据,安装命令:
pip install beautifulsoup4 -
lxml:配合 BeautifulSoup4 提升解析速度,安装命令:
pip install lxml
二、爬虫第一步:用 requests 获取网页数据
以爬取 “豆瓣读书 TOP250”(简单无反爬)的书籍名称为例,先学会获取网页 HTML:
-
发送请求
用
requests.get()函数向目标网页发送请求,代码如下(结合入门教程的变量、函数知识):
import requests # 导入库
\# 目标网页URL(豆瓣读书TOP250第一页)
url = "https://book.douban.com/top250?start=0"
\# 模拟浏览器请求(添加User-Agent,避免被网站识别为爬虫)
headers = {
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}
\# 发送GET请求,获取响应
response = requests.get(url, headers=headers)
\# 查看响应状态码(200表示请求成功,403/404等表示失败)
print("请求状态码:", response.status\_code)
\# 查看获取的HTML内容(前500字符)
print("HTML内容片段:", response.text\[:500])
- 关键知识点:
headers中的User-Agent是浏览器标识,不添加可能被网站拒绝请求;response.text是获取的 HTML 文本。
-
处理请求异常
为避免网络错误导致程序崩溃,用
try-except捕获异常(入门教程的流程控制知识):
try:
  response = requests.get(url, headers=headers, timeout=10) # 超时10秒
  response.raise\_for\_status() # 若状态码非200,抛出异常
except requests.exceptions.RequestException as e:
  print("请求失败:", e)
三、解析数据:用 BeautifulSoup4 提取内容
获取 HTML 后,需从杂乱代码中提取目标数据(如书籍名称),步骤如下:
-
解析 HTML 结构
先在浏览器中查看目标数据的 HTML 位置:打开 “豆瓣读书 TOP250”,右键 “检查”,用 “元素选择器” 点击书籍名称,可看到书籍名称在
<div class="pl2">下的<a>标签中,代码如下:
from bs4 import BeautifulSoup # 导入解析库
\# 用lxml解析器解析HTML
soup = BeautifulSoup(response.text, "lxml")
\# 找到所有包含书籍信息的\<div class="pl2">标签(返回列表)
book\_items = soup.find\_all("div", class\_="pl2") # class\_加下划线避免与Python关键字冲突
\# 遍历列表,提取每本书的名称
for item in book\_items:
  \# 找到\<a>标签,获取标签内的文字(strip()去除空格换行)
  book\_name = item.find("a")\["title"].strip() # \["title"]获取a标签的title属性值
  print("书籍名称:", book\_name)
- 运行结果:会打印出豆瓣 TOP250 第一页的 25 本图书名称,如 “活着”“百年孤独” 等。
-
常用解析方法
| 方法 | 作用 | 示例 |
|---------------------|-------------------------------|-------------------------------|
|
find("标签", 属性)| 找到第一个匹配的标签 |soup.find("div", class_="pl2")||
find_all("标签")| 找到所有匹配的标签(返回列表)|soup.find_all("a")||
标签["属性名"]| 获取标签的属性值 |a_tag["href"](获取链接) ||
标签.get_text()| 获取标签内的所有文字 |div_tag.get_text()|
四、实战案例:爬取多页豆瓣读书数据
结合循环知识,爬取豆瓣读书 TOP250 前 3 页(每页 25 本,共 75 本),并将结果保存到文本文件:
import requests
from bs4 import BeautifulSoup
def get\_douban\_books(page\_start):
  """获取某一页的豆瓣书籍名称,page\_start:起始位置(0、25、50...)"""
  url = f"https://book.douban.com/top250?start={page\_start}"
  headers = {
  "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
  }
  try:
  response = requests.get(url, headers=headers, timeout=10)
  response.raise\_for\_status()
  soup = BeautifulSoup(response.text, "lxml")
  book\_items = soup.find\_all("div", class\_="pl2")
  books = \[item.find("a")\["title"].strip() for item in book\_items] # 列表推导式
  return books
  except requests.exceptions.RequestException as e:
  print(f"第{page\_start//25+1}页请求失败:", e)
  return \[]
\# 爬取前3页(page\_start为0、25、50)
all\_books = \[]
for start in \[0, 25, 50]:
  print(f"正在爬取第{start//25+1}页...")
  page\_books = get\_douban\_books(start)
  all\_books.extend(page\_books) # 合并列表
\# 保存到文本文件(入门教程的文件操作延伸)
with open("豆瓣读书TOP75.txt", "w", encoding="utf-8") as f:
  for i, book in enumerate(all\_books, 1): # enumerate添加序号
  f.write(f"{i}. {book}\n")
print("爬取完成!共获取", len(all\_books), "本图书,已保存到文件。")
- 关键知识点:用
enumerate给书籍加序号,with open(...)安全打开文件,避免忘记关闭;encoding="utf-8"防止中文乱码。
五、常见问题与注意事项
-
中文乱码:保存文件或打印时,在
open()中加encoding="utf-8",或在print()前加response.encoding = "utf-8"。 -
反爬机制:除了加
User-Agent,还可设置请求间隔(用time.sleep(1)在循环中暂停 1 秒,需导入time库),避免频繁请求被封 IP。 -
复杂网页:若数据在 JavaScript 渲染的页面(如动态加载内容),需用
selenium库模拟浏览器渲染,安装命令:pip install selenium,并下载对应浏览器的驱动(如 Chrome 驱动)。
通过本教程,你已掌握简单 Python 爬虫的核心流程。后续可学习爬取图片、数据存储到 Excel(用pandas库)、处理登录验证等进阶内容,记得始终遵守网站规则,合法爬取数据。
(注:文档部分内容可能由 AI 生成)
更多推荐


所有评论(0)