跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Python算法

Python 爬虫基础教程:从原理到实战代码详解

Python 爬虫技术涵盖请求发送、HTML 解析及数据存储全流程。核心库包括 requests 和 BeautifulSoup,适用于静态页面;动态页面需借助 Selenium 模拟浏览器行为,大规模采集则推荐 Scrapy 框架。针对反爬机制,可通过设置 User-Agent、访问延迟及代理 IP 进行规避。数据保存支持 CSV 文件及 SQLite 数据库等多种方式,掌握这些基础即可构建稳定的数据采集方案。

宁静发布于 2026/3/30更新于 2026/7/2032 浏览
Python 爬虫基础教程:从原理到实战代码详解

简单来说,爬虫就是通过程序自动抓取网页信息的技术。当你右键查看网页源代码时,看到的 HTML 结构就是爬虫工作的对象。本文将以 Python 为例,从零开始讲解如何编写一个稳定的爬虫程序。

一、爬虫的基本流程

无论复杂的爬虫架构如何,核心逻辑通常包含三步:

  1. 发送请求:向目标网页发起 HTTP 请求,获取原始内容。
  2. 解析网页:从返回的 HTML 或 JSON 数据中提取关键信息。
  3. 保存数据:将提取到的信息存储到本地文件或数据库中。
二、常用工具库

在 Python 生态中,有几个库是开发爬虫时的标配:

  • requests:处理网络请求,获取网页内容。
  • BeautifulSoup:解析 HTML 文档,快速定位标签和数据。
  • Selenium:模拟浏览器行为,用于处理动态加载的内容。
  • Scrapy:强大的爬虫框架,适合大规模数据采集。
安装依赖

首先确保安装了必要的库。推荐使用国内镜像源加速下载:

pip install requests beautifulsoup4 selenium scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
三、静态页面爬虫实战

我们以百度首页为例,演示最基础的抓取流程。

1. 获取网页源码

使用 requests 库发送 GET 请求。为了模拟真实浏览器访问,建议添加 User-Agent 请求头。

import requests

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

这里的关键在于 response.text,它包含了服务器返回的完整 HTML 字符串。

2. 解析标题与链接

拿到 HTML 后,用 BeautifulSoup 进行解析。我们可以轻松提取页面标题和所有超链接。

from bs4 import BeautifulSoup

# 初始化解析器
soup = BeautifulSoup(response.text, 'html.parser')

# 获取标题
title = soup.title.text
print(f'网页标题:{title}')

# 提取所有链接
links = soup.find_all('a')
for link in links:
    href = link.get('href')
    if href:
        print(href)

注意,find_all('a') 会返回所有 <a> 标签,我们需要遍历并获取 href 属性。实际项目中,通常还需要过滤掉无效链接(如空值或以 # 开头的锚点)。

四、进阶场景处理
1. 动态网页(JavaScript 渲染)

如果网页内容是通过 JavaScript 异步加载的,普通的 requests 拿不到数据。这时需要 Selenium 来驱动浏览器。

from selenium import webdriver

# 启动 Chrome 浏览器
driver = webdriver.Chrome()

try:
    driver.get('https://www.example.com')
    print(driver.title)
finally:
    driver.quit()

Selenium 能像真人一样操作页面,比如点击按钮、滚动加载更多内容,非常适合处理现代前端应用。

2. 反爬机制应对

很多网站有反爬策略,常见的几种应对方式如下:

  • 伪装请求头:如上例所示,设置 User-Agent。
  • 控制频率:频繁请求会被封禁,加入随机延迟。
import time
import random

time.sleep(random.uniform(1, 3))  # 随机等待 1-3 秒
  • 代理 IP:如果单 IP 被封,可切换代理池。
proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'https://10.10.1.10:1080'
}
response = requests.get(url, proxies=proxies)
五、数据存储方案

数据抓下来后,通常需要持久化存储。

1. CSV 文件

适合轻量级数据导出,Excel 可直接打开。

import csv

with open('data.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['标题', '链接'])  # 表头
    for link in links:
        writer.writerow([link.text, link.get('href')])
2. SQLite 数据库

适合结构化数据,便于后续查询和分析。

import sqlite3

conn = sqlite3.connect('data.db')
cursor = conn.cursor()

# 建表
cursor.execute('''
    CREATE TABLE IF NOT EXISTS links (
        title TEXT,
        href TEXT
    )
''')

# 插入数据
for link in links:
    cursor.execute(
        'INSERT INTO links (title, href) VALUES (?, ?)',
        (link.text, link.get('href'))
    )

conn.commit()
conn.close()
六、总结

爬虫开发的核心在于理解 HTTP 协议和 HTML 结构。对于初学者,掌握 requests 和 BeautifulSoup 足以应对大部分静态页面需求。遇到动态加载内容时,引入 Selenium;面对大规模采集任务,则应转向 Scrapy 框架。同时,务必遵守网站的 robots.txt 协议,合理控制请求频率,避免对目标服务器造成压力。

目录

  1. 一、爬虫的基本流程
  2. 二、常用工具库
  3. 安装依赖
  4. 三、静态页面爬虫实战
  5. 1. 获取网页源码
  6. 2. 解析标题与链接
  7. 初始化解析器
  8. 获取标题
  9. 提取所有链接
  10. 四、进阶场景处理
  11. 1. 动态网页(JavaScript 渲染)
  12. 启动 Chrome 浏览器
  13. 2. 反爬机制应对
  14. 五、数据存储方案
  15. 1. CSV 文件
  16. 2. SQLite 数据库
  17. 建表
  18. 插入数据
  19. 六、总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 国内 10 家主流 AI 大模型盘点与特性分析
  • 构建与 GitHub 深度集成的自动化工作流实战指南
  • Python 内置函数深度解析:tuple()与 type() 实用指南
  • Neo4j 图数据库安装与核心命令详解
  • 前端 API 设计最佳实践
  • Ubuntu 22.04 网络配置实战:静态 IP 与 DNS 设置
  • ChatGPT 插件生态爆发:自动写书流程与插件知识库构建方法
  • OmniSteward:基于 LLM Agent 的语音文字智能家居与电脑控制系统
  • C++ 多态详解:概念、实现与底层原理
  • C++ 继承机制核心解析
  • Whisper 开源语音转文本模型原理与实战
  • Java 网络协议:HTTP 请求与响应
  • 滑动窗口算法详解:水果成篮问题
  • 前端开发者 Agent 工程化开发学习路线
  • OpenClaw 部署飞书机器人
  • OpenClaw 本地安装与配置指南:打造专属 AI 执行助手
  • 数据库 SQL 防火墙:内核级防护与 SQL 注入防御实战
  • RoboBrain2.0 具身大脑模型复现指南:统一感知推理与规划
  • Web 开发中五种常用加密算法原理与实战
  • Python 核心基础:函数、列表与元组实战指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online