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

Python 爬虫技术实战指南:从入门到分布式采集

Python 爬虫技术通过自动化请求与解析获取网页数据。涵盖基础请求发送、页面解析技巧、反爬策略应对、Scrapy 框架搭建、数据库存储及分布式采集方案。重点讲解 requests、lxml、MongoDB 及 Redis 的应用,提供代码示例与工程化建议,强调合法合规采集原则。

月光旅人发布于 2025/2/7更新于 2026/6/617 浏览
Python 爬虫技术实战指南:从入门到分布式采集

Python 爬虫技术实战指南

引言

Python 凭借其简洁的语法和强大的生态库,成为网络爬虫开发的首选语言。爬虫技术旨在自动化获取互联网公开数据,广泛应用于数据分析、市场监控、学术研究等领域。本教程将引导初学者从零开始,系统掌握从基础请求发送、页面解析、反爬应对到分布式采集的全流程技术。

需要注意的是,爬虫开发必须遵守目标网站的 robots.txt 协议及相关法律法规,尊重数据版权,严禁用于非法用途或侵犯隐私。

一、基础环境与 HTTP 请求

1.1 环境准备

安装 Python 3.x 版本(推荐 3.8+),建议使用虚拟环境管理依赖。

python -m venv crawler_env
source crawler_env/bin/activate  # Windows: crawler_env\Scripts\activate
pip install requests lxml beautifulsoup4 pymongo redis

1.2 发送 HTTP 请求

使用 requests 库模拟浏览器行为是爬虫的基础。需理解 HTTP 方法(GET/POST)、状态码及编码处理。

import requests
from requests.exceptions import RequestException

def fetch_page(url):
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
        'Accept-Language': 'zh-CN,zh;q=0.9'
    }
    try:
        response = requests.get(url, headers=headers, timeout=10)
        response.raise_for_status()
        response.encoding = response.apparent_encoding
        return response.text
    except RequestException as e:
        print(f"Request failed: {e}")
        return None

url = 'https://example.com'
text = fetch_page(url)
if text:
    print(text[:500])

Session 管理:对于需要登录或多步操作的网站,使用 Session 对象保持 Cookie 状态。

session = requests.Session()
session.headers.update(headers)
resp = session.post('https://example.com/login', data={'user': 'admin'})

二、页面解析与数据提取

2.1 XPath 解析

XPath 是定位 HTML 元素的强大工具,适合结构清晰的静态页面。

from lxml import etree

html_content = '''<div class="news">
    <h1>标题</h1>
    <p class="author">作者</p>
</div>'''
tree = etree.HTML(html_content)
# 提取标题
title = tree.xpath('//div[@class="news"]/h1/text()')
print(title)

2.2 CSS 选择器与 BeautifulSoup

BeautifulSoup 容错性强,适合处理不规范 HTML。

from bs4 import BeautifulSoup

soup = BeautifulSoup(html_content, 'lxml')
items = soup.find_all('div', class_='news')
for item in items:
    print(item.get_text())

2.3 正则表达式

适用于提取特定格式文本,如邮箱、电话等。

import re
pattern = r'\d{3}-\d{4}'
match = re.search(pattern, text)
if match:
    print(match.group())

三、反爬策略应对技巧

3.1 请求头伪装

设置 User-Agent、Referer、Cookie 等头部信息,避免被识别为脚本。

headers = {
    'User-Agent': 'Mozilla/5.0...',
    'Referer': 'https://www.google.com/'
}

3.2 代理 IP 池

频繁访问会导致 IP 被封禁,需构建代理池并轮换使用。

proxies_list = ['http://ip1:port', 'http://ip2:port']
proxy = random.choice(proxies_list)
response = requests.get(url, proxies={'http': proxy}, timeout=5)

3.3 验证码与加密

  • 验证码:集成 OCR 库(如 pytesseract)或调用打码平台 API。
  • 参数加密:分析 JS 代码中的加密逻辑(如 MD5、AES),在 Python 中复现解密过程。

3.4 频率控制

使用 time.sleep() 模拟人工操作间隔,降低被封风险。

import time
time.sleep(random.uniform(1, 3))

四、工程化框架 Scrapy

4.1 项目初始化

Scrapy 是功能强大的异步爬虫框架。

scrapy startproject myspider
cd myspider
scrapy genspider example example.com

4.2 编写 Spider

定义 Item 模型和解析逻辑。

import scrapy

class ExampleSpider(scrapy.Spider):
    name = 'example'
    allowed_domains = ['example.com']
    start_urls = ['https://example.com/page/1']

    def parse(self, response):
        for href in response.css('a.next::attr(href)').getall():
            yield response.follow(href, self.parse)
        
        yield {
            'title': response.css('h1::text').get(),
            'content': response.css('.content::text').getall()
        }

4.3 中间件与管道

  • Middleware:处理请求头、代理、异常重试。
  • Pipeline:清洗数据、去重、入库。

五、数据存储与管理

5.1 MongoDB 存储

MongoDB 适合存储非结构化数据,如评论、日志。

from pymongo import MongoClient

client = MongoClient('localhost', 27017)
db = client['crawler_db']
collection = db['articles']

data = {'title': '示例文章', 'url': 'https://...'}
result = collection.insert_one(data)
print(result.inserted_id)

5.2 MySQL 存储

结构化数据建议使用关系型数据库。

import pymysql
conn = pymysql.connect(host='localhost', user='root', password='pwd', database='db')
cursor = conn.cursor()
cursor.execute("INSERT INTO articles (title) VALUES (%s)", ('Title',))
conn.commit()

六、分布式爬虫架构

6.1 Redis 任务队列

利用 Redis 实现任务分发与去重。

import redis
r = redis.Redis(host='localhost', port=6379)
r.lpush('crawl_queue', 'https://example.com')
while True:
    url = r.rpop('crawl_queue')
    if url:
        process(url)

6.2 Scrapy-Redis 集成

配置 DUPEFILTER_CLASS 和 SCHEDULER 实现多节点共享队列。

DUPEFILTER_CLASS = "scrapy_redis.dupefilter.RFPDupeFilter"
SCHEDULER = "scrapy_redis.scheduler.Scheduler"
REDIS_HOST = 'localhost'
REDIS_PORT = 6379

七、性能优化与监控

7.1 并发控制

调整 Scrapy 的 CONCURRENT_REQUESTS 参数,平衡速度与稳定性。

7.2 日志记录

使用 logging 模块记录运行状态,便于排查问题。

import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info("Crawl started")

结语

爬虫技术需要持续实践与迭代。建议从静态网站入手,逐步挑战动态加载和复杂反爬场景。始终遵循合法合规原则,合理控制抓取频率,保护目标服务器安全。通过掌握上述技术栈,你将具备独立构建高效数据采集系统的能力。

目录

  1. Python 爬虫技术实战指南
  2. 引言
  3. 一、基础环境与 HTTP 请求
  4. 1.1 环境准备
  5. 1.2 发送 HTTP 请求
  6. 二、页面解析与数据提取
  7. 2.1 XPath 解析
  8. 提取标题
  9. 2.2 CSS 选择器与 BeautifulSoup
  10. 2.3 正则表达式
  11. 三、反爬策略应对技巧
  12. 3.1 请求头伪装
  13. 3.2 代理 IP 池
  14. 3.3 验证码与加密
  15. 3.4 频率控制
  16. 四、工程化框架 Scrapy
  17. 4.1 项目初始化
  18. 4.2 编写 Spider
  19. 4.3 中间件与管道
  20. 五、数据存储与管理
  21. 5.1 MongoDB 存储
  22. 5.2 MySQL 存储
  23. 六、分布式爬虫架构
  24. 6.1 Redis 任务队列
  25. 6.2 Scrapy-Redis 集成
  26. 七、性能优化与监控
  27. 7.1 并发控制
  28. 7.2 日志记录
  29. 结语
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

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

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

更多推荐文章

查看全部
  • MyBatis 缓存机制详解:一级与二级缓存
  • Linux 库制作与原理:从生成使用到 ELF 文件与链接解析
  • 使用 NVM 安装 Node.js 22 并配置国内镜像加速
  • Java Object 类详解:继承体系与常用方法解析
  • Linux 命令行核心指令与权限控制指南
  • 基于 Python 和 Selenium 的浏览器操作录制器实现
  • 4G Cat.1 模组赋能 AI 教育机器人:政策与技术的双重驱动
  • OpenClaw 30+ 真实使用案例开源,参考 AI 助理落地方案
  • C++ 运算符重载:自定义类型的运算扩展
  • MAVROS 安装配置、基础概念与 ROS C++仿真案例
  • FPGA 摄像头采集处理显示指南:OV5640 到 HDMI 实时显示
  • C++ 算法刷题:气球排列、迷宫搜索与主持人调度
  • Vivado 许可证获取与配置实战指南
  • 自然语言处理:大模型理论与实践
  • 基于 FastAPI 的 Web 上位机系统设计与实现
  • AI 绘画敏感内容控制:提示词策略与安全实践
  • Python 基础入门:变量概念与数据类型详解
  • 自然语言处理技术与应用实践
  • AI 大模型学习指南:从基础理论到工程化落地
  • Python Web 框架 Django 实战指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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