初学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版权协议,转载请附上原文出处链接和本声明。