Python 数据采集完全指南 —— 从零开始掌握网络爬虫与文件读取

🐍 Python 入门系列

Python 数据采集

图解教程

从零开始,通过图解 + 完整代码,掌握数据采集的每一个步骤

🌐 网络爬虫📁 文件读取🔌 API 调用🗄️ 数据库

  • [① 什么是数据采集](#① 什么是数据采集)
  • [② 数据来源](#② 数据来源)
  • [③ 常用库](#③ 常用库)
  • [④ 环境安装](#④ 环境安装)
  • [⑤ 文件采集](#⑤ 文件采集)
  • [⑥ 网络爬虫](#⑥ 网络爬虫)
  • [⑦ API 采集](#⑦ API 采集)
  • [⑧ 数据库](#⑧ 数据库)
  • [⑨ 注意事项](#⑨ 注意事项)

🔍什么是数据采集?

数据采集是数据分析的第一步------将散落在各处的数据统一抓取到本地

🌐网页 / 爬虫📁本地文件🔌API 接口🗄️数据库📡实时流数据🐍Python 数据采集requests · pandas · scrapy📊 分析💾 存储

📥

输入

来自网页、文件、数据库、API 等各种来源的原始数据

⚙️

处理

Python 程序发送请求、解析内容、提取所需字段

📤

输出

结构化数据,可用于分析、可视化或机器学习

📡数据从哪里来?

了解不同来源的特点,选择合适的采集方式

来源类型 典型例子 常用工具 难度 支持格式
🌐 网页数据 商品信息、新闻、排行榜 requests + BeautifulSoup ⭐⭐ HTML
📁 本地文件 成绩表、销售记录、日志 pandas、open() CSV Excel JSON
🔌 API 接口 天气、股票、地图、翻译 requests ⭐⭐ JSON
🗄️ 数据库 MySQL、SQLite、MongoDB pymysql、sqlite3 ⭐⭐⭐ SQL
📡 实时流 传感器数据、微博热搜 Kafka、WebSocket ⭐⭐⭐⭐ JSON

📦必学的 Python 库

掌握这几个库,就能完成 90% 的数据采集任务

🌐

requests

发送 HTTP 请求,获取网页内容或调用 API。最基础、最常用的库。

网络请求

🍲

BeautifulSoup4

解析 HTML/XML 文档,轻松提取标签内容、属性、链接等。

HTML解析

🐼

pandas

读取 CSV、Excel 等文件,强大的数据处理与分析框架。

数据处理

🕷️

Scrapy

专业爬虫框架,支持并发采集、自动翻页、数据管道等高级功能。

爬虫框架

🤖

Selenium

操控浏览器,适合需要登录、点击、滚动等 JavaScript 动态页面。

动态页面

🗂️

sqlite3 / pymysql

连接 SQLite / MySQL 数据库,执行 SQL 查询,读写数据。

数据库

🛠️环境安装(第一步必做)

打开终端(CMD / PowerShell / Anaconda Prompt),依次执行以下命令

① 安装 Pythonpython.org② pip 安装库pip install ...③ 验证安装import 测试④ 开始写代码VSCode / PyCharm

$pip install requests

$pip install beautifulsoup4

$pip install pandas openpyxl

$pip install lxml

Anaconda 用户已内置 pandas,只需额外安装 requests 和 beautifulsoup4 即可

💡

国内网络慢可加镜像:pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

📁方式一:读取本地文件

最简单的数据采集------直接读取电脑上的 CSV / Excel / JSON 文件

📂 准备文件CSV / Excel🐼 pandas 读取read_csv / read_excel🔎 查看数据df.head() / info()🧹 清洗数据dropna / fillna💾 保存结果to_csv / to_excel

file_collect.py --- 读取 CSV / Excel 文件Python

复制代码
import pandas as pd

# ══════════════════════════════════
# 1. 读取 CSV 文件
# ══════════════════════════════════
df = pd.read_csv("scores.csv", encoding="utf-8")

# 2. 查看前 5 行数据
print(df.head())

# 3. 查看数据基本信息(列名、类型、非空数量)
print(df.info())

# 4. 查看基本统计(均值、最大最小值等)
print(df.describe())

# ══════════════════════════════════
# 读取 Excel 文件(需先 pip install openpyxl)
# ══════════════════════════════════
df2 = pd.read_excel("data.xlsx", sheet_name="Sheet1")

# 读取 JSON 文件
df3 = pd.read_json("data.json")

# ══════════════════════════════════
# 5. 数据清洗(去掉空行)
# ══════════════════════════════════
df_clean = df.dropna()          # 删除含空值的行
df_fill  = df.fillna(0)         # 将空值填充为 0

# 6. 保存结果为新 CSV
df_clean.to_csv("output.csv", index=False)
print("✅ 数据已保存!")

💡

如果文件有中文乱码,尝试 encoding="gbk"encoding="gb2312"

🕷️方式二:网络爬虫

自动访问网页,提取文字、图片、表格等内容------数据采集的核心技能

🌐① 发送请求requests.get(url)📄② 获取网页response.text🍲③ 解析 HTMLBeautifulSoup🔎④ 提取数据find / find_all💾⑤ 保存CSV / Excel网络爬虫 完整流程

1

发送 HTTP 请求

用 requests 库向目标网站发送 GET 请求,就像用浏览器打开网页一样

step1_request.pyPython

复制代码
import requests

url = "https://quotes.toscrape.com/"  # 练习用爬虫网站

# 添加请求头,模拟浏览器,避免被拒绝
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
}

response = requests.get(url, headers=headers)
print("状态码:", response.status_code)  # 200 = 成功
print("网页长度:", len(response.text), "字符")

2

解析 HTML 内容

用 BeautifulSoup 把网页 HTML 变成可以用 Python 操作的对象

step2_parse.pyPython

复制代码
from bs4 import BeautifulSoup

# 用 lxml 解析器解析 HTML(速度快)
soup = BeautifulSoup(response.text, "lxml")

# 查看网页标题
print(soup.find("title").text)

# 查看网页结构(格式化输出)
print(soup.prettify()[:500])  # 只看前500字符

3

提取目标数据

find()(找第一个)和 find_all()(找所有)提取数据

step3_extract.pyPython

复制代码
# 找所有名言(class="text"的span标签)
quotes = soup.find_all("span", class_="text")

# 找所有作者(class="author"的small标签)
authors = soup.find_all("small", class_="author")

# 打印前 3 条
for i in range(min(3, len(quotes))):
    print(f"名言:{quotes[i].text}")
    print(f"作者:{authors[i].text}")
    print("-" * 40)

4

保存数据到 CSV

将采集到的数据整理成列表,用 pandas 保存为 CSV 文件

step4_save.pyPython

复制代码
import pandas as pd

data = []
for q, a in zip(quotes, authors):
    data.append({
        "名言": q.text.strip(),
        "作者": a.text.strip()
    })

# 转换为 DataFrame
df = pd.DataFrame(data)
print(df)

# 保存为 CSV
df.to_csv("quotes.csv", index=False, encoding="utf-8-sig")
print("✅ 已保存到 quotes.csv")

🎯 完整爬虫代码(一键运行)

full_crawler.pyPython

复制代码
import requests
from bs4 import BeautifulSoup
import pandas as pd
import time

def crawl_quotes(pages=3):
    """爬取名言网站前 N 页数据"""
    all_data = []
    
    for page in range(1, pages + 1):
        url = f"https://quotes.toscrape.com/page/{page}/"
        headers = {"User-Agent": "Mozilla/5.0"}
        
        # ① 发请求
        resp = requests.get(url, headers=headers, timeout=10)
        if resp.status_code != 200:
            print(f"第{page}页请求失败,跳过")
            continue
        
        # ② 解析
        soup = BeautifulSoup(resp.text, "lxml")
        items = soup.find_all("div", class_="quote")
        
        # ③ 提取
        for item in items:
            all_data.append({
                "名言": item.find("span", class_="text").text.strip(),
                "作者": item.find("small", class_="author").text.strip(),
                "页码": page
            })
        
        print(f"✅ 第{page}页采集完成,共{len(items)}条")
        time.sleep(1)  # 礼貌等待 1 秒,避免给服务器压力
    
    # ④ 保存
    df = pd.DataFrame(all_data)
    df.to_csv("quotes_all.csv", index=False, encoding="utf-8-sig")
    print(f"\n🎉 采集完成!共 {len(all_data)} 条,已保存到 quotes_all.csv")
    return df

# 运行
df = crawl_quotes(pages=3)
print(df.head())

🔌方式三:调用 API 接口

许多平台提供官方 API,返回 JSON 格式数据,比爬虫更稳定

🐍Python 程序requests.get()📤 发送请求🏢第三方 API 服务器天气 / 股票 / 地图...📥 返回 JSON📊结构化数据解析 / 分析 / 存储

api_collect.py --- 调用免费天气 APIPython

复制代码
import requests
import json

# ══════════════════════════════════
# 示例:调用 wttr.in 免费天气 API(无需注册)
# ══════════════════════════════════
city = "Changsha"  # 长沙
url  = f"https://wttr.in/{city}?format=j1"

headers = {"User-Agent": "Mozilla/5.0"}
response = requests.get(url, headers=headers, timeout=10)

if response.status_code == 200:
    data = response.json()     # 解析 JSON(自动转成字典)
    
    current = data["current_condition"][0]
    print("🌡️  当前温度:", current["temp_C"], "°C")
    print("💧 湿度:",     current["humidity"], "%")
    print("🌬️  风速:",     current["windspeedKmph"], "km/h")
    print("🌤️  天气描述:",  current["weatherDesc"][0]["value"])
else:
    print(f"请求失败,状态码:{response.status_code}")

# ══════════════════════════════════
# 保存原始 JSON 到文件
# ══════════════════════════════════
with open("weather.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)
print("✅ JSON 已保存到 weather.json")

💡

常用免费 API:wttr.in (天气)、exchangerate-api.com (汇率)、pokeapi.co (练习用)、jsonplaceholder.typicode.com(测试数据)

🗄️方式四:从数据库采集

Python 内置 sqlite3,可直接操作 SQLite 数据库,无需安装额外软件

db_collect.py --- SQLite 数据库采集Python

复制代码
import sqlite3
import pandas as pd

# ══════════════════════════════════
# 1. 连接(或创建)数据库
# ══════════════════════════════════
conn = sqlite3.connect("students.db")
cursor = conn.cursor()

# 2. 创建示例表并插入数据(首次运行)
cursor.execute("""
    CREATE TABLE IF NOT EXISTS scores (
        name TEXT, subject TEXT, score REAL
    )
""")
sample = [
    ("李天宇", "数学", 92),
    ("刘文财", "数学", 85),
    ("陈扬",   "数学", 78),
]
cursor.executemany("INSERT INTO scores VALUES (?,?,?)", sample)
conn.commit()

# ══════════════════════════════════
# 3. 查询数据(用 pandas 直接读取)
# ══════════════════════════════════
df = pd.read_sql_query("SELECT * FROM scores ORDER BY score DESC", conn)
print(df)

# 4. 关闭连接
conn.close()
print("✅ 数据库采集完成!")

⚠️重要注意事项

合理合法使用爬虫,避免踩坑

🚫 遵守 robots.txt

每个网站根目录下的 /robots.txt 文件说明了哪些页面禁止爬取,务必遵守。

👉https://example.com/robots.txt

⏱️ 控制请求频率

每次请求后加 time.sleep(1) 等待至少 1 秒,频繁请求会被封 IP,也会给服务器带来压力。

🔒 数据合法使用

不得爬取个人隐私、受版权保护的内容,采集的数据只能用于学习和合法用途。

📝 添加请求头

设置 User-Agent 模拟浏览器,部分网站会拒绝没有请求头的访问。

复制代码
"User-Agent": "Mozilla/5.0 ..."

📚 学习路线推荐

① requests发网络请求② BeautifulSoup解析 HTML③ pandas整理/保存数据④ Selenium动态页面(进阶)⑤ Scrapy专业框架(进阶)

掌握前三步就能完成大多数数据采集任务,Selenium 和 Scrapy 属于进阶内容

网址:Python 数据采集完全指南 ------ 从零开始掌握网络爬虫与文件读取https://lijunjie070318-maker.github.io/python-libraries-guide/

相关推荐
Adorable老犀牛2 小时前
Prometheus 常用告警规则 rules.yml
开发语言·prometheus·exporter·nodeexpoeter
stephon_1002 小时前
国产大模型 Agent 开发实战:用 milu 5 分钟搭一个多用户 AI Agent 服务(DeepSeek/Qwen/Kimi/GLM)
人工智能·python·ai·chatgpt
阿里matlab建模师2 小时前
【机场停机位分配】matlab实现基于遗传算法的机场停机位分配优化研究
开发语言·算法·数学建模·matlab·全国大学生数学建模竞赛
xiaoshuaishuai82 小时前
C# Avalonia 依赖属性与WPF的区别
开发语言·c#·wpf
一碗白开水一2 小时前
【训练技巧】bash: conda: command not found:conda 没有适配环境
开发语言·conda·bash
一晌小贪欢2 小时前
第22节:相关性分析——协方差、相关系数与热力图解读
开发语言·python·数据分析·pandas·数据可视化
杨超越luckly2 小时前
Agent应用指南:利用GET请求获取理想汽车门店位置信息
前端·python·html·汽车·可视化
财经资讯数据_灵砚智能2 小时前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年6月9日
人工智能·python·ai·信息可视化·自然语言处理·ai编程·灵砚智能
keykey6.2 小时前
循环神经网络(RNN)与序列模型:让AI学会“记忆“
开发语言·人工智能·深度学习·机器学习