爬取双色球的历史记录

it2022-05-05  155

爬取双色球的历史记录

1.项目简介

​ 双色球是由中国福利彩票的一种玩法。双色球投注区分为红色球号码区和蓝色球号码区,红色球号码区由1-33共三十三个号码组成,蓝色球号码区由1-16共十六个号码组成。投注时选择6个红色球号码和1个蓝色球号码组成一注进行单式投注,每注金额人民币2元。

​ 今天爬取一个关于双色球开奖历史的网站。

2.项目流程

1.获取目标网站
2.解析目标网站
3.数据获取
4.数据保存

3.项目准备

1.目标网站
2.工具准备:

​ pandas requests lxml

3.网页解析

​ 使用xpath解析网页

4.数据存储

​ 将数据保存在CSV文件中

4.程序编写

1.获取每一页的URL
def get_pag_url(): """ 获取每一页的URL """ urls=[] for i in range(1,123+1): i=str(i) url= 'http://kaijiang.zhcw.com/zhcw/html/ssq/list_'+i+'.html' urls.append(url) return urls
2.获取每一页的数据信息
def get_imfomation(url): """ 获取每一页的数据信息 """ resp=requests.get(url).text html=etree.HTML(resp) data=html.xpath('//tr/td[1]/text()') number=html.xpath('//tr/td[2]/text()') red_1=html.xpath('//tr/td[3]/em[1]/text()') red_2=html.xpath('//tr/td[3]/em[2]/text()') red_3=html.xpath('//tr/td[3]/em[3]/text()') red_4=html.xpath('//tr/td[3]/em[4]/text()') red_5=html.xpath('//tr/td[3]/em[5]/text()') red_6=html.xpath('//tr/td[3]/em[6]/text()') blue=html.xpath('//tr/td[3]/em[7]/text()') data=zip(data,number,red_1,red_2,red_3,red_4,red_5,red_6,blue) return data
3.创建一个CSV文件,将数据表的列名(第一行)写进去
def creat_csv(): """ 创建一个CSV文件,并且写入列表的头部信息 """ first_data = [('日期', '期号', '红球1', '红球2', '红球3', '红球4', '红球5', '红球6', '蓝球')] first_line = pd.DataFrame(data=first_data, columns=['日期', '期号', '红球1', '红球2', '红球3', '红球4', '红球5', '红球6', '蓝球']) first_line.to_csv('双色球信息.csv', encoding='gb18030', mode='a', index=False, header=False)
4.将传入的数据追加保存在创建好的CSV文件中
def saving(data): """ 将每一页的数据追加写入创建好的CSV文件中 """ all_data=pd.DataFrame(data=data,columns=['日期','期号','红球1','红球2','红球3','红球4','红球5','红球6','蓝球']) all_data.to_csv('双色球信息.csv',encoding='gb18030',mode='a',index= False,header=False)
5.主函数(调度器)
def main(): """ 主函数 爬虫调度器 """ creat_csv() url_list=get_pag_url() for i in url_list: print("正在获取第{}页的信息".format(i)) data=get_imfomation(i) saving(data)

5.总结评价

这个项目主要运用Python实现简单的网络爬虫,目标网站布局清楚,解析网页十分容易,操作起来几乎没有什么困难。

在保存数据的时候,可能要注意到CSV文件的创建和通过循环追加写入的方法,另外,CSV文件可以通过Excel打开查看,但是Excel支持的编码是 gb18030 ,使用默认的编码方式可能会对中文输入产生乱码。

6.源代码

""" item:获取双色球历史开奖记录 author:Jonty """ import requests from lxml import etree import pandas as pd def get_pag_url(): """ 获取每一页的URL """ urls = [] for i in range(1, 123+1): i = str(i) url ='http://kaijiang.zhcw.com/zhcw/html/ssq/list_'+i+'.html' urls.append(url) return urls def get_imfomation(url): """ 获取每一页的数据信息 """ resp = requests.get(url).text html = etree.HTML(resp) data = html.xpath('//tr/td[1]/text()') number = html.xpath('//tr/td[2]/text()') red_1 = html.xpath('//tr/td[3]/em[1]/text()') red_2 = html.xpath('//tr/td[3]/em[2]/text()') red_3 = html.xpath('//tr/td[3]/em[3]/text()') red_4 = html.xpath('//tr/td[3]/em[4]/text()') red_5 = html.xpath('//tr/td[3]/em[5]/text()') red_6 = html.xpath('//tr/td[3]/em[6]/text()') blue = html.xpath('//tr/td[3]/em[7]/text()') data = zip(data,number,red_1,red_2,red_3,red_4,red_5,red_6,blue) return data def saving(data): """ 将每一页的数据追加写入创建好的CSV文件中 """ all_data = pd.DataFrame(data=data,columns=['日期','期号','红球1','红球2','红球3','红球4','红球5','红球6','蓝球']) all_data.to_csv('双色球信息.csv',encoding='gb18030',mode='a',index= False,header=False) def creat_csv(): """ 创建一个CSV文件,并且写入列表的头部信息 """ first_data = [('日期', '期号', '红球1', '红球2', '红球3', '红球4', '红球5', '红球6', '蓝球')] first_line = pd.DataFrame(data=first_data, columns=['日期', '期号', '红球1', '红球2', '红球3', '红球4', '红球5', '红球6', '蓝球']) first_line.to_csv('双色球信息.csv', encoding='gb18030', mode='a', index=False, header=False) def main(): """ 主函数 爬虫调度器 """ creat_csv() url_list = get_pag_url() for i in url_list: print("正在获取第{}页的信息".format(i)) data = get_imfomation(i) saving(data) if __name__ == '__main__': main()

最新回复(0)