Python 网络爬虫基础与通用模板实现
Python 因其简洁的语法和强大的第三方库生态,成为编写网络爬虫的首选编程语言。本文将详细介绍 Python 爬虫的基本原理、核心步骤以及一个通用的开发模板,帮助开发者快速构建稳定的数据采集系统。
一、核心依赖库
在开始之前,需要安装以下主要库:
requests:用于发送 HTTP 请求。beautifulsoup4:用于解析 HTML 文档。re:Python 内置模块,用于正则表达式匹配。csv/sqlite3:用于数据存储。
安装命令:
pip install requests beautifulsoup4 lxml
二、爬虫基本工作流程
一个标准的爬虫程序通常包含以下五个关键步骤:
- 发送网络请求:构造 HTTP 请求头(如 User-Agent),模拟浏览器行为,获取目标网页的源代码。
- 解析 HTML 页面:利用解析库将 HTML 文本转换为可操作的对象树,定位所需数据节点。
- 数据清洗与处理:去除多余空白字符、特殊符号,对数据进行格式化转换。
- 数据存储:将处理后的数据保存为本地文件(CSV、JSON)或写入数据库。
- 异常处理与循环控制:处理网络波动、解析错误,并支持多页面分页爬取。
三、通用爬虫模板详解
以下是一个结构清晰、具备基础容错能力的 Python 爬虫模板。该模板采用了函数模块化设计,便于后续扩展和维护。
import requests
from bs4 import BeautifulSoup
import time
import random
def get_html_content(url):
"""
访问网页并获取响应内容
:param url: 目标网址
:return: 网页文本内容或 None
"""
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
}
try:
# 设置超时时间,防止请求挂起
response = requests.get(url, headers=headers, timeout=10)
response.raise_for_status()
# 自动识别编码,避免乱码
response.encoding = response.apparent_encoding
return response.text
except Exception as e:
print()
():
soup = BeautifulSoup(html_content, )
data_list = []
items = soup.find_all(, class_=)
item items:
title = item.find().get_text(strip=) item.find()
link = item.find()[] item.find()
data_list.append({: title, : link})
data_list
():
result_list:
()
csv
filename =
(filename, , newline=, encoding=) f:
writer = csv.DictWriter(f, fieldnames=[, ])
writer.writeheader()
writer.writerows(result_list)
()
__name__ == :
target_url =
time.sleep(random.uniform(, ))
html_content = get_html_content(target_url)
html_content:
result_list = parse_html(html_content)
store_data(result_list)
:
()


