所有的双色球开奖记录都在这里了

初学python,写了一个爬取历史双色球开奖记录的程序。希望大家互相交流学习

 1.找到数据的入口

百度一下双色球历史开奖记录,出来许多网站,找到可以查看历史记录的网站就行,我这里找到的是

http://kaijiang.500.com/ssq.shtml

里面看历史记录的入口是下拉框,只要爬取出下拉框里的地址,就知道历史的记录了。

2.爬取所有历史记录的地址

import requests
import LoadHistoryTask
#这个是代理,公司内网无法直接访问,正常是不需要的
proxy_dict = {
    "http": "http://****:****@proxy.****.com:8080/",
    "https": "http://****:****@proxy.****.com:8080/"
}
#获取页面内容
homePage = requests.get("http://kaijiang.500.com/ssq.shtml", proxies=proxy_dict)
homePage.encoding = "gb2312"
pageStr = homePage.text
#解析页面里下拉框选项里的地址,并放入list中
pageStr = pageStr[pageStr.find('<div class="iSelectList">'):]
historyArr = pageStr[len('<div class="iSelectList">'):pageStr.find('</div>')].split('</a><a')

3.遍历地址爬取开奖数据

for i in range(0, len(historyArr)):
    url = historyArr[i].split('"')[1]
    seq = url[url.find('ssq')+4:-6]
    if seq[0:2] in years:
        continue
    else:
        years.append(seq[0:2])
        LoadHistoryTask.getMessByIndex(seq)

这里将每年的数据存入到了一个文件中,爬取中奖号码的代码如下、

import requests
import re

proxy_dict = {
    "http": "http://****:****@proxy.****.com:8080/",
    "https": "http://****:****@proxy.****.com:8080/"
}


def getMessByIndex(index):
    lines = []
    for i in range(int(index), int(index) - int(index) % 1000, -1):
        try:

            s = str(i)
            if i < 10000:
                s = '0' + s
            everyPage = requests.get('http://kaijiang.500.com/shtml/ssq/%s.shtml' % (s), proxies=proxy_dict)
            everyPage.encoding = "gb2312"
            partStart = everyPage.text[everyPage.text.find('class="kj_tablelist02"'):]
            partMain = partStart[:partStart.find('</table>')]

            index = partMain[partMain.find('<strong>'):partMain.find('</strong>')].replace('<strong>', '')
            print('双色球第', index, '期')
            checkOutDate = partMain[partMain.find('class="span_right">'):partMain.find('</span></td>')]
            checkOutDate = checkOutDate[len('class="span_right">'):checkOutDate.find(' 兑奖')].replace('开奖日期:', '')
            dateArr = [int(s) for s in re.findall(r'\d+', checkOutDate)]
            print('开奖日期:', dateArr)

            numbersArr = partMain[partMain.find('<li'):partMain.find('</ul>')].split('</li>')
            ballArr = []
            for j in range(0, len(numbersArr) - 1):
                ballArr.append(int(numbersArr[j].split('>')[1]))
            print('开奖号码', ballArr)
            ballOrderStr = partMain[partMain.rfind('<td>'):partMain.rfind('</td>')].replace('<td>', '').lstrip()

            print('出球顺序', ballOrderStr)

            lines.append(index + '-' + str(ballArr) + '-' + str([int(a) for a in ballOrderStr.split(' ')]) + '-' + str(
                dateArr) + '\n')
            print('-----------------')
        except:
            pass
    with open("record%s" % index[0:2], "w", encoding='utf-8') as f:
        f.writelines(lines)

 

 


版权声明:本文为n009ww原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。