双色球开奖结果信息采集

前言

1 这个网站是支持自由查询的,所获取的信息,该网站也是透明的;
2 能查询的最早的一期开奖号码就是2003001期,开天辟地第1期;
3 可以把所有信息保存在excel表格中,辅助分析开奖趋势。

一 参数

1 params

很容易猜出’callback’是怎么生成的,如果看源代码的话也很容易找到它的生成方式

n = input('想看多少次开奖号码?请输入:').strip()
tt = random.random()
t = int(time.time() * 1000)
rand = str(random.random())
params = {
    'callback': ('jQuery' + '1.12.2' + rand).replace('.', '') + '_' + str(t),
    'transactionType': '10001001',
    'lotteryId': 1,
    'issueCount': n,
    'startIssue': '',
    'endIssue': '',
    'startDate': '',
    'endDate': '',
    'type': 0,
    'pageNum': 1,
    'pageSize': n,
    'tt': tt,
    '_': t + 1
}

2 headers

必须有referer,不然返回空数据

url = 'https://jc.zhcw.com/port/client_json.php'
headers = {
    'referer': 'https://www.zhcw.com/',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0'
}

二 获取数据

所有的开奖信息都在data_list里面了

resp = requests.get(url=url, headers=headers, params=params)
resp.close()
data = resp.text.strip(params['callback']).strip('(').strip(')')
json_data = json.loads(data)
data_list = json_data['data']

三 保存数据

我的电脑默认编码是‘gbk’,如果电脑是’utf-8’,更改成encoding=‘utf-8’

f = open('双色球.csv', mode='w', encoding='gbk', newline='')
lst = []
for dct in data_list:
    # pprint(dct)
    new_dct = {}
    new_dct['期号'] = dct['issue']
    new_dct['日期'] = dct['openTime']
    new_dct['红球'] = dct['frontWinningNum']
    new_dct['蓝球'] = dct['backWinningNum']
    new_dct['一等奖'] = dct['winnerDetails'][0]['baseBetWinner']['awardNum']
    new_dct['一等奖单注奖金'] = dct['winnerDetails'][0]['baseBetWinner']['awardMoney']
    new_dct['二等奖'] = dct['winnerDetails'][1]['baseBetWinner']['awardNum']
    new_dct['二等奖单注奖金'] = dct['winnerDetails'][1]['baseBetWinner']['awardMoney']
    new_dct['三等奖'] = dct['winnerDetails'][2]['baseBetWinner']['awardNum']
    new_dct['三等奖单注奖金'] = dct['winnerDetails'][2]['baseBetWinner']['awardMoney']
    new_dct['四等奖'] = dct['winnerDetails'][3]['baseBetWinner']['awardNum']
    new_dct['四等奖单注奖金'] = dct['winnerDetails'][3]['baseBetWinner']['awardMoney']
    new_dct['五等奖'] = dct['winnerDetails'][4]['baseBetWinner']['awardNum']
    new_dct['五等奖单注奖金'] = dct['winnerDetails'][4]['baseBetWinner']['awardMoney']
    new_dct['六等奖'] = dct['winnerDetails'][5]['baseBetWinner']['awardNum']
    new_dct['六等奖单注奖金'] = dct['winnerDetails'][5]['baseBetWinner']['awardMoney']
    lst.append(new_dct)
    # break
header = ['期号', '日期', '红球', '蓝球', '一等奖', '一等奖单注奖金', '二等奖', '二等奖单注奖金', '三等奖', '三等奖单注奖金', '四等奖', '四等奖单注奖金', '五等奖', '五等奖单注奖金', '六等奖', '六等奖单注奖金']
csv_writer = csv.DictWriter(f, header)
csv_writer.writeheader()
csv_writer.writerows(lst)
f.close()

四 完整代码

import time
import requests
import random
import json
import csv
from pprint import pprint

n = input('想看多少次开奖号码?请输入:').strip()
tt = random.random()
t = int(time.time() * 1000)
rand = str(random.random())

url = 'https://jc.zhcw.com/port/client_json.php'
headers = {
    'referer': 'https://www.zhcw.com/',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36 Edg/133.0.0.0'
}
params = {
    'callback': ('jQuery' + '1.12.2' + rand).replace('.', '') + '_' + str(t),
    'transactionType': '10001001',
    'lotteryId': 1,
    'issueCount': n,
    'startIssue': '',
    'endIssue': '',
    'startDate': '',
    'endDate': '',
    'type': 0,
    'pageNum': 1,
    'pageSize': n,
    'tt': tt,
    '_': t + 1
}
# print(params)
resp = requests.get(url=url, headers=headers, params=params)
resp.close()
data = resp.text.strip(params['callback']).strip('(').strip(')')
json_data = json.loads(data)
data_list = json_data['data']
f = open('双色球.csv', mode='w', encoding='gbk', newline='')
lst = []
for dct in data_list:
    # pprint(dct)
    new_dct = {}
    new_dct['期号'] = dct['issue']
    new_dct['日期'] = dct['openTime']
    new_dct['红球'] = dct['frontWinningNum']
    new_dct['蓝球'] = dct['backWinningNum']
    new_dct['一等奖'] = dct['winnerDetails'][0]['baseBetWinner']['awardNum']
    new_dct['一等奖单注奖金'] = dct['winnerDetails'][0]['baseBetWinner']['awardMoney']
    new_dct['二等奖'] = dct['winnerDetails'][1]['baseBetWinner']['awardNum']
    new_dct['二等奖单注奖金'] = dct['winnerDetails'][1]['baseBetWinner']['awardMoney']
    new_dct['三等奖'] = dct['winnerDetails'][2]['baseBetWinner']['awardNum']
    new_dct['三等奖单注奖金'] = dct['winnerDetails'][2]['baseBetWinner']['awardMoney']
    new_dct['四等奖'] = dct['winnerDetails'][3]['baseBetWinner']['awardNum']
    new_dct['四等奖单注奖金'] = dct['winnerDetails'][3]['baseBetWinner']['awardMoney']
    new_dct['五等奖'] = dct['winnerDetails'][4]['baseBetWinner']['awardNum']
    new_dct['五等奖单注奖金'] = dct['winnerDetails'][4]['baseBetWinner']['awardMoney']
    new_dct['六等奖'] = dct['winnerDetails'][5]['baseBetWinner']['awardNum']
    new_dct['六等奖单注奖金'] = dct['winnerDetails'][5]['baseBetWinner']['awardMoney']
    lst.append(new_dct)
    # break
header = ['期号', '日期', '红球', '蓝球', '一等奖', '一等奖单注奖金', '二等奖', '二等奖单注奖金', '三等奖', '三等奖单注奖金', '四等奖', '四等奖单注奖金', '五等奖', '五等奖单注奖金', '六等奖', '六等奖单注奖金']
csv_writer = csv.DictWriter(f, header)
csv_writer.writeheader()
csv_writer.writerows(lst)
f.close()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值