前言
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()