在 Python 编写爬虫时,代码的结构设计直接影响到项目的可维护性、扩展性和开发效率。本文将从实际案例出发,对比两种主流封装方式:
-
方式一: 函数式封装
-
方式二: 面向对象 + 模块化封装
目录
一、函数式封装:适合初学者的轻量结构
结构特点:
线性函数式编程结构,将每一个步骤拆分为独立函数:
-
gen_url()
:生成目标链接 -
send_request()
:发送 HTTP 请求 -
parser_data()
:解析返回的 JSON 数据 -
save_data()
:存入 MongoDB(含去重逻辑) -
main()
:作为主程序执行入口
优点:
-
简洁直接,结构清晰
-
学习门槛低,非常适合新手理解
-
快速开发时非常高效
缺点:
-
可扩展性弱:比如需要加入代理池、日志记录、异步爬取等功能时,逻辑容易耦合在一起
-
可复用性差:想要把这套逻辑迁移到其他项目中,需要大幅度复制粘贴和修改
-
配置写死:如 headers、MongoDB 连接信息都硬编码在主文件中,不便修改和维护
示例代码:
import requests
import hashlib
import pymongo
# ========== MongoDB 初始化 ==========
client = pymongo.MongoClient(host="localhost", port=27017)
db = client['demo_database']
# ========== 请求头配置 ==========
headers = {
"referer": "https://www.example.com/",#这个要替换成正确的网址
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/130.0.0.0 Safari/537.36",
"x-requested-with": "XMLHttpRequest"
}
# ========== 1. 生成请