所有的雙色球開獎記錄都在這裏了

初學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)

 

 

發佈了49 篇原創文章 · 獲贊 12 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章