Python爬虫实战

10 阅读4分钟

Python爬虫实战

无需手动整理,轻松获取完整网站记录

概述

你是否需要分析一些网站的历史数据,但苦于找不到完整的数据集?手动整理又太麻烦?本文将介绍一个基于Python的爬虫程序,能够自动从500彩票网爬取双色球历史开奖数据,并智能保存到Excel文件中,支持去重和自动排序功能。

功能特点

  1. 智能数据爬取:从500彩票网获取指定期数的双奖号数据
  2. 自动去重处理:避免重复数据,确保数据唯一性
  3. 智能合并:新数据与现有数据自动合并
  4. 降序排列:按期数自动降序排列,便于查看最新数据
  5. 用户友好:提供详细提示和错误处理
  6. 数据持久化:保存到Excel文件,方便后续分析

核心代码解析

  1. 数据爬取功能
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'  # 处理中文编码
  1. 智能数据合并
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
  1. 数据验证机制
# 验证输入格式
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

运行程序

  1. 首次运行:程序将创建新的Excel文件
  2. 输入期数范围:按照提示输入5位期数(如24001-24160)
  3. 自动处理:程序将自动爬取、去重、排序并保存数据

示例运行

双色球历史数据爬取程序
==================================================

现有数据文件中包含以下年份的数据: 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

技术要点

  1. 反爬虫策略绕过 通过设置合理的请求头和延时,模拟正常浏览器访问,有效避免被网站屏蔽。
  2. 数据解析优化 使用XPath多种选择器尝试定位数据表格,提高代码的健壮性和兼容性。
  3. 数据完整性检查 对爬取的数据进行多重验证,确保期数格式正确、红球数量为6个、蓝球存在等。
  4. 错误处理机制 完善的异常捕获和处理,确保程序在遇到网络问题或数据异常时不会崩溃。

数据格式

生成的Excel文件包含三列:

  1. 期数:5位数字,前两位为年份,后三位为期号
  2. 红球:6个红球号码,用逗号分隔
  3. 蓝球:1个蓝球号码

注意事项

  1. 合法使用:本程序仅用于技术学习和数据分析,请遵守相关法律法规
  2. 访问频率:合理控制爬取频率,避免对目标网站造成过大压力
  3. 数据验证:建议定期验证数据的准确性
  4. 备份数据:重要数据请定期备份

扩展功能建议

如需进一步扩展,可以考虑:

  1. 添加可视化分析:使用matplotlib或pyecharts绘制走势图
  2. 数据统计分析:计算频率、冷热号等指标
  3. 定时自动爬取:添加定时任务自动更新最新数据
  4. 导出多种格式:支持CSV、JSON等多种数据格式

结语

这个爬虫程序提供了一个简单有效的方式来获取双色球历史数据,无论是用于数据分析、研究还是个人兴趣,都能节省大量手动整理的时间。代码结构清晰,注释完整,适合Python初学者学习和修改。

温馨提示:彩票有风险,投注需谨慎。本程序仅供技术学习使用,不构成任何投资建议。