爬取彩票信息(有空试下)
暂且不说,彩票预测是否靠谱?彩票预测也分人而异,江湖上骗术很多,有些甚至会误以为彩票预测的准确度可以很高,这些操盘手法,让不知原理的彩民心甘情愿地掏钱买料。
在彩票预测上,也有正儿八经去研究“规律” 的。不外乎三个“派别”:数据派、图形派、公式派。还有一派不列入:字谜字画派,可纳入蛇精病行列。
究竟哪一派预测的靠谱准确呢?不懂,因为我几乎不买彩票(买也是玩玩,娱乐娱乐),也不去研究。
但不管哪一派总得有数据可研究。本文就介绍如何获取3D彩票自创办以来所有的数据,包括中奖号码、中奖注数、销售额以及返奖比例等。
爬取网页信息
在爬取一些简单的、没有反爬机制的静态网页时,一般采取的策略是:选中目标(所谓的URL链接),观察结构(链接结构,网页结构),构思动手(选用什么HTML下载器,解析器等)。
在爬虫过程中,都会涉及到三种利器:
-
HTML下载器:下载HTML网页;
-
HTML解析器:解析出有效数据;
-
数据存储器:将有效数据通过文件或者数据库的形式存储起来。
今天,我们将利用requests库和BeautifulSoup模块,来抓取中彩网页福彩3D相关的信息,并将其保存到Excel表格中。
在开始前,先分析看看目标网页的结构:
可以发现,目标网页的URL http://kaijiang.zhcw.com/zhcw/html/3d/list_2.html,每次变化一处:list_x后面的数字,其代表第几页。
然后,观察其网页结构。也很简单,可以看到一期的彩票信息对应的源代码是一个tr节点,我们可以用BeautifulSoup库来提取这里面的一些信息。
整体思路是:若要获取福彩3D创办14年以来所有的信息(一共246页),只需要分开请求246次,这样获取不同的页面之后,再利用BeautifulSoup库提取到相关信息,利用xlrd库将数据写入Excel中,就可以获取到福彩3D所有的信息,结果如下图:
(一共将近5000条数据)
详情代码如下:
import requests
from bs4 import BeautifulSoup
import xlwt
import time
#获取第一页的内容
def get_one_page(url):
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36'
}
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response.text
return None
#解析第一页内容,数据结构化
def parse_one_page(html):
soup = BeautifulSoup(html,'lxml')
i = 0
for item in soup.select('tr')[2:-1]:
yield{
'time':item.select('td')[i].text,
'issue':item.select('td')[i+1].text,
'digits':item.select('td em')[0].text,
'ten_digits':item.select('td em')[1].text,
'hundred_digits':item.select('td em')[2].text,
'single_selection':item.select('td')[i+3].text,
'group_selection_3':item.select('td')[i+4].text,
'group_selection_6':item.select('td')[i+5].text,
'sales':item.select('td')[i+6].text,
'return_rates':item.select('td')[i+7].text
}
#将数据写入Excel表格中
def write_to_excel():
f = xlwt.Workbook()
sheet1 = f.add_sheet('3D',cell_overwrite_ok=True)
row0 = ["开奖日期","期号","个位数","十位数","百位数","单数","组选3","组选6","销售额","返奖比例"]
#写入第一行