Python爬虫实战
无需手动整理,轻松获取完整网站记录
概述
你是否需要分析一些网站的历史数据,但苦于找不到完整的数据集?手动整理又太麻烦?本文将介绍一个基于Python的爬虫程序,能够自动从500彩票网爬取双色球历史开奖数据,并智能保存到Excel文件中,支持去重和自动排序功能。
功能特点
- 智能数据爬取:从500彩票网获取指定期数的双奖号数据
- 自动去重处理:避免重复数据,确保数据唯一性
- 智能合并:新数据与现有数据自动合并
- 降序排列:按期数自动降序排列,便于查看最新数据
- 用户友好:提供详细提示和错误处理
- 数据持久化:保存到Excel文件,方便后续分析
核心代码解析
- 数据爬取功能
def crawl_ssq_data(start_num, end_num):
"""爬取双色球数据"""
# 构造动态URL
url = f"https://datachart.500.com/ssq/history/newinc/history.php?start={start_num}&end={end_num}"
# 设置请求头模拟浏览器访问
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...',
}
response = requests.get(url, headers=headers, timeout=10)
response.encoding = 'gb2312' # 处理中文编码
- 智能数据合并
def save_to_excel(data, start_num, end_num):
"""保存数据到Excel文件,以追加形式保存并按期数降序排列"""
# 检查文件是否已存在
if os.path.exists(filename):
# 读取现有数据
existing_df = pd.read_excel(filename, engine='openpyxl', dtype={'期数': str})
# 找出需要添加的新期数
existing_issues = set(existing_df['期数'].astype(str))
new_issues = set(new_df['期数'].astype(str))
issues_to_add = new_issues - existing_issues
- 数据验证机制
# 验证输入格式
if len(start_num) != 5 or len(end_num) != 5:
print("错误:期数必须是5位数字!")
continue
# 验证期数范围
if end_int % 1000 > 160:
print("错误:后三位最大不超过160")
continue
使用教程
环境准备
首先确保安装必要的Python库:
pip install requests lxml pandas openpyxl
运行程序
- 首次运行:程序将创建新的Excel文件
- 输入期数范围:按照提示输入5位期数(如24001-24160)
- 自动处理:程序将自动爬取、去重、排序并保存数据
示例运行
双色球历史数据爬取程序
==================================================
现有数据文件中包含以下年份的数据: 22, 23
总共有 320 条历史记录
温馨提示:请输入形如24001的期数,前两位是年份,后3位是期数,不超过160
请输入开始期数(如:24001):24001
请输入结束期数(如:24160):24160
开始爬取数据,URL: https://datachart.500.com/ssq/history/newinc/history.php?start=24001&end=24160
成功爬取 160 条数据
成功追加 160 条新数据到: 双色球历史数据.xlsx
技术要点
- 反爬虫策略绕过 通过设置合理的请求头和延时,模拟正常浏览器访问,有效避免被网站屏蔽。
- 数据解析优化 使用XPath多种选择器尝试定位数据表格,提高代码的健壮性和兼容性。
- 数据完整性检查 对爬取的数据进行多重验证,确保期数格式正确、红球数量为6个、蓝球存在等。
- 错误处理机制 完善的异常捕获和处理,确保程序在遇到网络问题或数据异常时不会崩溃。
数据格式
生成的Excel文件包含三列:
- 期数:5位数字,前两位为年份,后三位为期号
- 红球:6个红球号码,用逗号分隔
- 蓝球:1个蓝球号码
注意事项
- 合法使用:本程序仅用于技术学习和数据分析,请遵守相关法律法规
- 访问频率:合理控制爬取频率,避免对目标网站造成过大压力
- 数据验证:建议定期验证数据的准确性
- 备份数据:重要数据请定期备份
扩展功能建议
如需进一步扩展,可以考虑:
- 添加可视化分析:使用matplotlib或pyecharts绘制走势图
- 数据统计分析:计算频率、冷热号等指标
- 定时自动爬取:添加定时任务自动更新最新数据
- 导出多种格式:支持CSV、JSON等多种数据格式
结语
这个爬虫程序提供了一个简单有效的方式来获取双色球历史数据,无论是用于数据分析、研究还是个人兴趣,都能节省大量手动整理的时间。代码结构清晰,注释完整,适合Python初学者学习和修改。
温馨提示:彩票有风险,投注需谨慎。本程序仅供技术学习使用,不构成任何投资建议。