提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
Python爬虫实现双色球历史数据抓取
前言
公司楼下恰巧有个中国福利彩票中心,跟同事每天中午吃完饭都会去买两注,在支持中国公益事业的同时,作着一夜暴富的梦想;概率什么的咱都懂,就是相信自己会暴富~~
自己按照生日、幸运数字等等,选了一注心仪的号码然后定投;定投一段时间以后,自然而然的想到了 这注双色球号码在历史开奖中是否中过奖;如何查询选择的双色球号码在历史期数中是否中过奖;于是赶紧百度一下,看看怎么查,没有就自己做一个呀;
果然搜到了一个 china-ssq(http://china-ssq.net)电脑端、手机端浏览器都可访问,截图如下:
看了下网站的大体功能,提供双色球号码是否中过奖、大乐透号码是否中过奖,历史重复开奖记录等功能。网站介绍如下:
- 历史中奖查询:查询您心仪的号码(单式)是否已经在历史期数中开过奖,以供您参考
- 复式历史中奖查询:查询您所选的号码(复式)在历史开奖中,红球重复n球及以上的纪录
- 历史重复开奖记录查询:检索所有的历史开奖记录,查看是否有重复的开奖号码
- 中奖通知:在本站收藏您的幸运号码,我们将实时监控幸运号码的中奖情况,并第一时间通知到您
具体不知道这个网站开了多久,作者是否已经盈利了。不管三七二十一,我也决定用python实现一个。
一、用python抓取每天的开奖数据
代码如下(示例):
import requests
from bs4 import BeautifulSoup
import os
def get_data(url):
response = requests.get(url)
return response.text
def parse_data(html):
soup = BeautifulSoup(html, 'html.parser')
list = soup.select('div.ball_box01 ul li')
ball = [li.string for li in list]
return ball
def write_to_csv(page, ball):
with open('双色球开奖结果.csv', 'a', encoding='utf_8_sig') as f:
f.write(f'第{page}期,{",".join(ball)}\n')
def turn_page():
url = "http://kaijiang.500.com/ssq.shtml"
html = get_data(url)
soup = BeautifulSoup(html, 'html.parser')
pageList = soup.select("div.iSelectList a")
for p in pageList:
url = p['href'] # 提取链接
page = p.string # 提取字符串
download(url, page)
def download(url, page):
html = get_data(url)
ball = parse_data(html)
write_to_csv(page, ball)
print(f"第{page}期开奖结果录入完成")
def main():
if os.path.exists('双色球开奖结果.csv'):
os.remove('双色球开奖结果.csv')
turn_page()
if __name__ == '__main__':
main()
二、接口开发
传参自己心仪的双色球号码,然后去所有期次中撞库
代码如下(示例):
@RequestMapping(value ="/duotoneLottery/query",method = RequestMethod.GET)
public List<DuotoneLotteryHistory> getDuotoneLotteriesByList(@RequestParam(value = "blue", required = false) Integer blue,
@RequestParam(value = "red") String red){
long startTime = System.currentTimeMillis();
logger.info("begin query, blue: " + blue + ", red: " + red);
List<String> ballList = Arrays.asList(red.split(","));
List<Integer> balls = ballList.stream().map(Integer::valueOf).collect(Collectors.toList());
Collections.sort(balls);
DuotoneLotteryHistory duotoneLotteryQO = new DuotoneLotteryHistory();
duotoneLotteryQO.setRed1(balls.get(0));
duotoneLotteryQO.setRed2(balls.get(1));
duotoneLotteryQO.setRed3(balls.get(2));
duotoneLotteryQO.setRed4(balls.get(3));
duotoneLotteryQO.setRed5(balls.get(4));
duotoneLotteryQO.setRed6(balls.get(5));
duotoneLotteryQO.setBlue(blue);
QueryWrapper<DuotoneLotteryHistory> wrapper = new QueryWrapper<>(duotoneLotteryQO);
List<DuotoneLotteryHistory> duotoneLotteryHistories = duotoneLotteryHistoryService.list(wrapper);
logger.info("result size: " + duotoneLotteryHistories.size());
String totalTime = DateUtils.getFriendlyTimeDiff(startTime, System.currentTimeMillis());
logger.info("end totalTime: " + totalTime);
return duotoneLotteryHistories;
}
总结
有了所有期次数据后,就可以进行数据分析挖掘,开发各种有意思的功能;
最后,希望大家支持中国公益彩票,祝各位早日中得大奖~实现财富自由!