Python爬虫零基础学习知识点详解【基础版】

✅ 纯白话拆解+代码示例+实战场景,零基础可直接上手

✅ 技术适配:基于Python 3.12 + Requests + BeautifulSoup4 + Selenium 4.x + Scrapy入门,聚焦静态网页爬取、动态网页爬取、数据存储三大核心场景

✅ 条理清晰:从"环境搭建→基础语法→爬虫核心→实战案例"层层拆解,无冗余知识点

✅ 核心目标:小白掌握爬虫入门核心能力,能独立爬取静态网页数据并完成基础数据存储


一、前置准备:认知与环境搭建

1. 爬虫是什么?

爬虫是模拟浏览器请求网页、提取并保存数据的程序,核心用途:

  • 数据采集:如爬取电商商品信息、新闻资讯、豆瓣影评等;
  • 数据分析:为后续数据处理、可视化提供原始数据;
  • 自动化:替代人工复制粘贴,提升数据获取效率。

2. 必备环境搭建

(1)Python安装

官网下载对应系统版本(https://www.python.org/downloads/),安装时勾选"Add Python to PATH"(避免手动配置环境变量)。

验证:终端/命令行输入 python --version,显示Python 3.12+即成功。

(2)核心库安装(终端/命令行执行)
bash 复制代码
# 发送HTTP请求(爬虫核心)
pip install requests
# 解析网页数据
pip install beautifulsoup4
# 处理HTML/XML
pip install lxml
# 动态网页爬取(模拟浏览器)
pip install selenium
# 数据存储辅助
pip install pandas

3. 爬虫合规性(必看)

  • 遵守网站robots.txt协议(如https://www.xxx.com/robots.txt);
  • 控制请求频率,避免给服务器造成压力;
  • 不爬取敏感数据(隐私、付费内容),不用于商业违规用途。

二、第一部分:爬虫基础核心

1. HTTP请求基础(爬虫底层逻辑)

核心概念
  • 请求:爬虫向网站服务器发送"获取网页"的指令(如GET请求);
  • 响应:服务器返回的网页数据(状态码200=成功,403=禁止访问,500=服务器错误);
  • 请求头:模拟浏览器标识(如User-Agent),避免被网站识别为爬虫。
代码示例:用Requests发送基础请求
python 复制代码
import requests

# 1. 发送GET请求
url = "https://www.baidu.com"
# 请求头:模拟Chrome浏览器
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"
}
# 发送请求并获取响应
response = requests.get(url, headers=headers)

# 2. 响应处理
response.encoding = "utf-8"  # 设置编码,避免乱码
print("响应状态码:", response.status_code)
print("网页内容:", response.text[:500])  # 打印前500个字符
关键要点:
  • headers必须设置User-Agent,否则易被网站拦截;
  • response.text返回网页源码,response.json()用于获取接口JSON数据;
  • 常用请求方法:GET(获取数据)、POST(提交数据,如登录)。

2. 静态网页数据解析(BeautifulSoup4)

白话解释

BeautifulSoup4(简称BS4)是解析HTML/XML的工具,能快速提取网页中的文本、链接、图片等数据,无需手动正则匹配。

核心用法:
python 复制代码
from bs4 import BeautifulSoup
import requests

# 1. 获取网页源码
url = "https://book.douban.com/top250"
headers = {"User-Agent": "Chrome/120.0.0.0"}
response = requests.get(url, headers=headers)
response.encoding = "utf-8"
html = response.text

# 2. 初始化BS4解析器
soup = BeautifulSoup(html, "lxml")  # lxml解析器效率高,需提前安装

# 3. 数据提取(以豆瓣Top250书籍为例)
# 方法1:根据标签+属性查找(推荐)
book_items = soup.find_all("div", class_="pl2")  # 查找所有class为pl2的div标签
for item in book_items[:3]:  # 只取前3本
    # 提取书名(a标签的文本)
    book_name = item.find("a")["title"]
    # 提取书籍链接(a标签的href属性)
    book_link = item.find("a")["href"]
    print(f"书名:{book_name},链接:{book_link}")

# 方法2:CSS选择器(类似前端)
# book_names = soup.select(".pl2 a[title]")
核心方法:
  • find():查找第一个匹配的标签;
  • find_all():查找所有匹配的标签;
  • select():CSS选择器语法(如.class#ida[href]);
  • 提取属性:标签["属性名"],提取文本:标签.get_text()/标签.text

3. 动态网页爬取(Selenium入门)

动态网页(如JS渲染的内容)无法通过Requests直接获取,Selenium可模拟浏览器操作(打开页面、滚动、点击),获取渲染后的完整数据。

代码示例:爬取JS渲染的页面
python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
import time

# 1. 配置Chrome浏览器(需下载ChromeDriver,或用自动配置)
# 方式1:自动匹配Chrome版本(需安装:pip install webdriver-manager)
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# 2. 打开网页
driver.get("https://www.xxx.com/dynamic-page")
time.sleep(2)  # 等待页面加载(关键)

# 3. 提取数据(以提取列表项为例)
items = driver.find_elements(By.CLASS_NAME, "item-class")
for item in items[:3]:
    print(item.text)

# 4. 关闭浏览器
driver.quit()
关键要点:
  • 等待机制:用time.sleep()(简单)或WebDriverWait(智能等待,推荐);

  • 元素定位:By.CLASS_NAME/By.ID/By.XPATH/By.CSS_SELECTOR

  • 无头模式:无需打开浏览器窗口,适合服务器运行:

    python 复制代码
    options = webdriver.ChromeOptions()
    options.add_argument("--headless=new")  # 无头模式
    driver = webdriver.Chrome(options=options, service=Service(ChromeDriverManager().install()))

4. 数据存储(入门级)

爬取的数据需持久化存储,基础方案有3种:

(1)保存为文本文件(TXT)
python 复制代码
data = ["书名1", "书名2", "书名3"]
# 写入TXT
with open("books.txt", "w", encoding="utf-8") as f:
    for line in data:
        f.write(line + "\n")
(2)保存为CSV文件(表格,适合结构化数据)
python 复制代码
import csv

# 表头+数据
header = ["书名", "链接"]
data = [
    ["书名1", "https://xxx.com/1"],
    ["书名2", "https://xxx.com/2"]
]
# 写入CSV
with open("books.csv", "w", encoding="utf-8-sig", newline="") as f:
    writer = csv.writer(f)
    writer.writerow(header)  # 写表头
    writer.writerows(data)   # 写数据
(3)保存到Excel(Pandas简化操作)
python 复制代码
import pandas as pd

# 构建DataFrame
df = pd.DataFrame({
    "书名": ["书名1", "书名2"],
    "链接": ["https://xxx.com/1", "https://xxx.com/2"]
})
# 写入Excel
df.to_excel("books.xlsx", index=False)  # index=False不保存行号

三、第二部分:基础实战案例

案例1:爬取豆瓣Top250书籍(静态网页)

python 复制代码
import requests
from bs4 import BeautifulSoup
import csv

def crawl_douban_book():
    # 1. 初始化变量
    url = "https://book.douban.com/top250"
    headers = {"User-Agent": "Chrome/120.0.0.0"}
    all_data = []
    header = ["排名", "书名", "评分", "链接"]
    
    # 2. 发送请求+解析数据
    response = requests.get(url, headers=headers)
    response.encoding = "utf-8"
    soup = BeautifulSoup(response.text, "lxml")
    
    # 提取书籍列表
    book_list = soup.find_all("tr", class_="item")
    for idx, book in enumerate(book_list[:10]):  # 取前10本
        # 排名
        rank = book.find("em").text
        # 书名
        name = book.find("div", class_="pl2").find("a")["title"]
        # 评分
        score = book.find("span", class_="rating_nums").text
        # 链接
        link = book.find("div", class_="pl2").find("a")["href"]
        
        all_data.append([rank, name, score, link])
    
    # 3. 保存数据到CSV
    with open("douban_book_top250.csv", "w", encoding="utf-8-sig", newline="") as f:
        writer = csv.writer(f)
        writer.writerow(header)
        writer.writerows(all_data)
    print("爬取完成,数据已保存到douban_book_top250.csv")

if __name__ == "__main__":
    crawl_douban_book()

案例2:爬取动态加载的商品列表(Selenium)

python 复制代码
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager
import pandas as pd
import time

def crawl_dynamic_goods():
    # 1. 配置浏览器
    options = webdriver.ChromeOptions()
    options.add_argument("--headless=new")  # 无头模式
    driver = webdriver.Chrome(options=options, service=Service(ChromeDriverManager().install()))
    
    # 2. 打开页面
    driver.get("https://www.xxx.com/goods-list")
    time.sleep(3)  # 等待JS渲染
    
    # 3. 提取数据
    goods_data = []
    goods_items = driver.find_elements(By.CLASS_NAME, "goods-item")
    for item in goods_items[:5]:
        # 商品名称
        name = item.find_element(By.CLASS_NAME, "goods-name").text
        # 商品价格
        price = item.find_element(By.CLASS_NAME, "goods-price").text
        goods_data.append({"商品名称": name, "价格": price})
    
    # 4. 保存数据
    df = pd.DataFrame(goods_data)
    df.to_excel("dynamic_goods.xlsx", index=False)
    
    # 5. 关闭浏览器
    driver.quit()
    print("爬取完成,数据已保存到dynamic_goods.xlsx")

if __name__ == "__main__":
    crawl_dynamic_goods()

四、核心避坑清单

  1. ❌ 未设置User-Agent → ✅ 必须添加,否则易被网站拦截;
  2. ❌ 直接爬取动态网页 → ✅ 静态网页用Requests+BS4,动态网页用Selenium;
  3. ❌ 爬取时无延迟 → ✅ 加time.sleep(1-2),避免请求过快被封IP;
  4. ❌ 中文乱码 → ✅ 设置response.encoding = "utf-8",保存文件用utf-8-sig
  5. ❌ 找不到标签 → ✅ 检查标签名/类名是否正确(可通过浏览器F12验证);
  6. ❌ 忽略异常 → ✅ 加try-except捕获请求失败、标签不存在等异常。

五、总结

  1. 核心流程:爬虫的核心是"发送请求→解析数据→存储数据",Requests+BeautifulSoup4是静态网页爬取的基础组合;
  2. 场景适配:静态网页用Requests,动态网页用Selenium,根据页面类型选择对应工具;
  3. 数据存储:入门级优先选择CSV/Excel,结构化数据用Pandas处理更高效;
  4. 合规与稳定:遵守网站规则,控制请求频率,添加异常处理保证程序稳定运行。

推荐学习Python爬虫零基础衔接进阶知识点详解【进阶版】

相关推荐
航Hang*1 小时前
第3章:复习篇——第1节:创建和管理数据库---题库
数据库·笔记·sql·学习·期末·复习
做萤石二次开发的哈哈2 小时前
萤石开放平台 萤石可编程设备 | 设备 Python SDK 使用说明
开发语言·网络·python·php·萤石云·萤石
降临-max2 小时前
JavaWeb企业级开发---Mybatis
java·开发语言·笔记·学习·mybatis
知乎的哥廷根数学学派2 小时前
基于多物理约束融合与故障特征频率建模的滚动轴承智能退化趋势分析(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习
HarmonLTS3 小时前
Python Socket网络通信详解
服务器·python·网络安全
郝学胜-神的一滴3 小时前
Python数据封装与私有属性:保护你的数据安全
linux·服务器·开发语言·python·程序人生
YangYang9YangYan3 小时前
2026大专大数据专业学习数据分析的价值与应用
大数据·学习·数据分析
智航GIS3 小时前
11.7 使用Pandas 模块中describe()、groupby()进行简单分析
python·pandas