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

Python 网络爬虫基础与实战详解

Python 爬虫技术涵盖静态与动态网页数据的自动化获取。核心流程包括发送 HTTP 请求、解析 HTML 内容及保存数据。常用工具如 requests 和 BeautifulSoup 处理静态页面,动态页面需借助 Selenium 模拟交互,大规模任务推荐 Scrapy 框架。应对反爬机制可调整请求头、设置访问延迟或使用代理 IP。数据存储支持 CSV 文件及 SQLite 数据库等多种方式,掌握这些基础技术有助于高效获取互联网公开信息。

鲜活发布于 2026/3/21更新于 2026/6/1326 浏览
Python 网络爬虫基础与实战详解

爬虫是指通过编程自动从网页上获取信息的技术。简单来说,当你打开网页查看源代码时,那些 HTML 结构就是爬虫工作的对象,它就像一位帮你阅读并提取内容的'机器人'。

本文将详细讲解如何从零开始编写一个 Python 爬虫,即使是完全没接触过编程的朋友也能理解。

一、爬虫的基本流程
  1. 发送请求:向目标网页发送 HTTP 请求,获取网页内容。
  2. 解析网页:从返回的 HTML 或 JSON 内容中提取你需要的信息。
  3. 保存数据:将提取到的信息保存到文件或数据库中,以便后续分析。
二、常用爬虫库

在 Python 中,有两个非常流行的库用于爬虫开发:

  • requests:用于发送网络请求,获取网页内容。
  • BeautifulSoup:用于解析网页内容,提取需要的数据。
1. 安装库

首先,你需要安装这两个库。在命令行中执行以下命令:

pip install requests beautifulsoup4 -i https://pypi.tuna.tsinghua.edu.cn/simple
三、简单爬虫示例

接下来,我们会编写一个简单的爬虫,从一个网页上获取数据。

1. 获取网页内容

第一步是使用 requests 库来获取网页的内容。我们以获取百度首页为例。

import requests

# 发送请求获取网页内容
url = 'https://www.baidu.com'
response = requests.get(url)

# 打印网页内容
print(response.text)

这里 requests.get(url) 用于向指定网址发送请求并获取网页内容,response.text 则返回网页的 HTML 代码。运行后,你会看到大量的 HTML 代码,这就是百度首页的内容。

2. 解析网页内容

获取网页内容后,我们需要用 BeautifulSoup 库来解析 HTML,提取我们需要的信息。接下来我们解析百度首页的标题。

from bs4 import BeautifulSoup

# 解析网页内容
soup = BeautifulSoup(response.text, 'html.parser')

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

BeautifulSoup(response.text, 'html.parser') 用于解析 HTML 内容,soup.title.text 返回网页的标题。输出结果如下:

网页标题:百度一下,你就知道
3. 提取更多信息

让我们继续提取网页中的链接(<a>标签中的 href 属性)。这非常有用,例如你想抓取某个网站上的所有文章链接。

# 获取所有的<a>标签
links = soup.find_all('a')

# 打印所有链接
for link in links:
    href = link.get('href')
    print(href)

soup.find_all('a') 用于获取网页中的所有链接,link.get('href') 获取每个链接的 href 属性,也就是网址。

四、爬虫的分类
1. 简单爬虫(静态网页)

如果网页是静态的,所有的数据直接在 HTML 代码中呈现,这种网页最容易爬取。以上示例就是一个典型的静态网页爬虫。

2. 动态爬虫(处理 JavaScript 生成的内容)

有些网页的数据不是直接在 HTML 中,而是通过 JavaScript 动态生成的。这类网页需要更复杂的处理方式,通常我们会使用 Selenium 这样的库来模拟浏览器操作。

安装 Selenium:
pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple

Selenium 可以像真实的用户一样与网页交互,甚至可以点击按钮、滚动页面等。比如要爬取动态生成的数据,我们可以使用 Selenium 来加载网页。

示例:
from selenium import webdriver

# 设置浏览器驱动路径
driver = webdriver.Chrome()

# 打开网页
driver.get('https://www.example.com')

# 获取网页标题
print(driver.title)

# 关闭浏览器
driver.quit()
3. 爬虫框架(Scrapy)

当你需要大规模爬取数据时,可以使用专门的爬虫框架——Scrapy。Scrapy 是一个强大的爬虫框架,具有异步、高效的特点,适合用于构建复杂的爬虫。

安装 Scrapy:
pip install scrapy -i https://pypi.tuna.tsinghua.edu.cn/simple
五、爬虫常见问题及解决方案
1. 网页反爬机制

有些网站不允许爬虫访问,通常会通过检测请求头或 IP 地址来防止爬虫访问。为了绕过这种限制,我们可以伪装成正常用户。

解决方法:添加请求头
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
}
response = requests.get(url, headers=headers)
2. 延迟访问

频繁访问某个网站可能会触发反爬机制,我们可以通过设置延迟避免这种问题。

import time

# 延迟 2 秒后发送下一个请求
time.sleep(2)
3. 代理 IP

如果网站通过检测 IP 地址限制访问,我们可以使用代理 IP。

proxies = {
    'http': 'http://10.10.1.10:3128',
    'https': 'https://10.10.1.10:1080',
}
response = requests.get(url, proxies=proxies)
六、保存数据

当我们提取到需要的信息后,通常需要将数据保存起来,常见的保存方式有保存到 CSV 文件 或 数据库。

1. 保存到 CSV 文件
import csv

# 保存数据到 CSV 文件
with open('data.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    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()
七、总结
  1. 爬虫的基本流程:发送请求,解析网页,提取并保存数据。
  2. 常用库:requests 用于发送请求,BeautifulSoup 用于解析 HTML。
  3. 进阶技术:处理动态网页需要用到 Selenium,而大规模爬取可以使用 Scrapy 框架。
  4. 应对反爬:通过伪装请求头、设置延迟以及使用代理 IP 等方式绕过反爬机制。

目录

  1. 一、爬虫的基本流程
  2. 二、常用爬虫库
  3. 1. 安装库
  4. 三、简单爬虫示例
  5. 1. 获取网页内容
  6. 发送请求获取网页内容
  7. 打印网页内容
  8. 2. 解析网页内容
  9. 解析网页内容
  10. 获取标题
  11. 3. 提取更多信息
  12. 获取所有的<a>标签
  13. 打印所有链接
  14. 四、爬虫的分类
  15. 1. 简单爬虫(静态网页)
  16. 2. 动态爬虫(处理 JavaScript 生成的内容)
  17. 安装 Selenium:
  18. 示例:
  19. 设置浏览器驱动路径
  20. 打开网页
  21. 获取网页标题
  22. 关闭浏览器
  23. 3. 爬虫框架(Scrapy)
  24. 安装 Scrapy:
  25. 五、爬虫常见问题及解决方案
  26. 1. 网页反爬机制
  27. 解决方法:添加请求头
  28. 2. 延迟访问
  29. 延迟 2 秒后发送下一个请求
  30. 3. 代理 IP
  31. 六、保存数据
  32. 1. 保存到 CSV 文件
  33. 保存数据到 CSV 文件
  34. 2. 保存到数据库
  35. 连接数据库(如果不存在会自动创建)
  36. 创建表
  37. 插入数据
  38. 提交事务并关闭连接
  39. 七、总结
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • AI 大模型时代产品经理核心能力与学习指南
  • 论文 AI 率多少算正常?各高校 AIGC 检测标准汇总
  • Python 实战:肘部法则与轮廓系数可视化(K-Means 聚类最优 K 值选择)
  • Web 开发者构建多模态 Agent 图像识别技能:JS+Python 全栈实践
  • C++ GESP 七级核心考点与算法实战指南
  • Pico 4XVR 1.10.13 安装与使用指南
  • 使用 Coze 工作流与飞影插件搭建口播数字人智能体
  • DeepSeek-R1 大模型基于 MS-Swift 框架的部署与微调实战
  • Ubuntu/Debian 系统下 libwebkit2gtk-4.1-0 的 APT 安装实战
  • C++ 泛型编程与模板技术详解
  • Web Components 封装实战:实现跨框架复用组件
  • 如何成为一名黑客
  • 华为 OD 机试:员工派遣
  • Windows 系统读写 Mac OS 磁盘驱动方案解析
  • 飞算 Java AI 编程助手功能介绍与实战演示
  • C++ STL 容器:基于红黑树模拟实现 map 与 set
  • Python 五大核心应用场景详解:从开发到运维
  • Flutter 三方库 discord_interactions 的鸿蒙化适配指南
  • Java 拼图小游戏开发:基于 Swing 的完整实现
  • 开源能源管理系统:开放代码如何重构产业底层逻辑

相关免费在线工具

  • 加密/解密文本

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

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

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

  • curl 转代码

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