双色球、大乐透、3D、排列三、排列五 等历史数据分布在不同网页里,有的历史数据不全,有的最新数据不及时更新。有的数据格式不适合进一步分析使用。 编写一个软件,一次性收集这些数据。为下一步分析做准备。
首先 创建d:\yypy 目录。 数据都会存储在这目录下。
1.性能
是一个用于抓取彩票数据并保存到 Excel 的 Python 脚本。支持以下彩票类型:
- 大乐透 (dlt)
- 双色球 (ssq)
- 排列三 (pls)
- 排列五 (plw)
- 3D (3d)
主要功能包括:
- 从指定网页抓取彩票历史数据。
- 获取最新的 3D 数据并插入到历史数据的最前面。
- 将数据保存为 Excel 文件,并记录日志信息。
数据来源公开网站。 不频繁抓取数据。
2. 代码优化点
(1)数据保存功能
- 使用
pandas将数据保存为 Excel 文件,文件名根据彩票类型动态生成。 - 日志中会输出最新 5 条记录和总记录数量,便于验证数据完整性。
(2) 日志功能增强
- 使用
logging模块记录程序运行状态,包括成功打开网页、保存数据、以及错误信息。 - 日志信息包括时间戳、日志级别和具体消息,便于调试和跟踪。
(3) 异常处理
- 对网络请求和解析过程中的异常进行捕获和处理,确保程序健壮性。
- 如果网页打开失败或数据解析失败,会记录错误日志并继续执行后续任务。
3. 使用说明
(1) 运行环境
- Python 3.x
- 依赖库:
requests,beautifulsoup4,pandas,logging
(2) 运行方式
- 将代码保存为
yy_seekdata_main_2025_v2.py。 - 在终端或命令行中运行:
python yy_seekdata_main_2025_v2.py - 程序会自动抓取数据并保存到
d:/yypy/目录下,文件名为yy_彩票类型.xlsx。
(3) 日志文件
- 日志会输出到终端,同时可以通过修改
logging.basicConfig配置将日志保存到文件。
(4) 自定义配置
- 如果需要修改保存路径或文件名,可以修改
filename变量的值。 - 如果需要抓取其他彩票类型,可以在
lotteries列表中添加或修改配置。
4. 代码结构
# 导入库
import pandas as pd
import requests
from bs4 import BeautifulSoup
import logging
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 获取网页内容
def get_html(url, lottery_type):
...
# 解析大乐透和双色球数据
def parse_lottery(html, lottery_type):
...
# 解析排列三和3D数据
def parse_3d_pls_plw(html, lottery_type):
...
# 获取最新的3D数据
def get_latest_3d():
...
# 保存数据到 Excel
def save_to_excel(data, filename, lottery_type):
...
# 主函数
def main():
...
if __name__ == '__main__':
main()
其中 get_lastest_3d 部分 是解决历史数据完整的数据源 更新延时一天的问题。 再别的网站抓取最新数据。
5、注意事项
网络连接:
确保运行环境可以访问 https://datachart.500.com 。
如果网络不稳定,可能导致抓取失败。
网页结构变化:
如果目标网页的 HTML 结构发生变化,可能需要调整解析逻辑。
文件路径:
确保 d:/yypy/ 目录存在,或者修改为其他有效路径。
日志级别:
如果需要更详细的日志信息,可以将 logging.basicConfig 的 level 改为 logging.DEBUG。
6、示例
(1) 日志输出
2025-03-12 15:32:00,123 - INFO - dlt 网页打开成功
2025-03-12 15:32:01,456 - INFO - 数据已保存到 d:/yypy/yy_dlt.xlsx
2025-03-12 15:32:01,789 - INFO - dlt 最新5条记录:
period r1 r2 r3 r4 r5 b1 b2 date
0 26300 01 02 03 04 05 06 07 2025-03-11
1 26299 02 03 04 05 06 07 08 2025-03-10
...
2025-03-12 15:32:01,890 - INFO - dlt 总记录数量:100
(2) Excel 文件内容
period r1 r2 r3 r4 r5 b1 b2 date
26300 01 02 03 04 05 06 07 2025-03-11
26299 02 03 04 05 06 07 08 2025-03-10
... ... ... ... ... ... ... ... ...
7. 总结
yy_seekdata_main_2025_v2 版本通过优化代码逻辑、增强日志功能和异常处理,提升了程序的稳定性和可维护性。用户可以轻松抓取彩票数据并保存为 Excel 文件,便于后续分析和使用。如果有其他需求或改进建议,欢迎随时提出!
完整程序
import pandas as pd
import requests
from bs4 import BeautifulSoup
import logging
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 获取网页内容
def get_html(url, lottery_type):
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)
response.raise_for_status()
logging.info(f"{lottery_type} 网页打开成功")
return response.text
except requests.exceptions.RequestException as e:
logging.error(f"{lottery_type} 网页打开失败: {e}")
return None
# 解析大乐透和双色球数据
def parse_lottery(html, lottery_type):
soup = BeautifulSoup(html, 'lxml')
data = []
for row in soup.select('tr')[3:]:
try:

最低0.47元/天 解锁文章
6241

被折叠的 条评论
为什么被折叠?



