爬取双色球的历史记录
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
()