技术标签: python抓取彩票数据
用 Python 抓取分析十年彩票中奖结果
在爬取一些简单的 (没有反爬机制的) 静态网页时, 一般采取的策略是: 选中目标(所谓的 url 链接), 观察结构(链接结构, 网页结构), 构思动手(选用什么 html 下载器, 解析器等).
前两天, 在网上看到一个有意思的问题: 彩票预测靠谱么? 为什么还有那么多的人相信彩票预测?
暂且不说, 彩票预测是否靠谱? 彩票预测也分人而异, 江湖上骗术很多, 有些甚至会误以为彩票预测的准确度可以很高, 这些操盘手法, 让不知原理的彩民心甘情愿地掏钱买料.
在彩票预测上, 也有正儿八经去研究 "规律" 的, 不外乎三个 "派别": 数据派, 图形派, 公式派. 还有一派不列入: 字谜字画派, 可纳入蛇精病行列.
究竟哪一派预测的靠谱准确呢? 不懂, 因为我几乎不买彩票(买也是玩玩, 娱乐娱乐), 也不去研究. 但不管哪一派总得有数据可研究, 今天我只负责帮大家如何获取 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 条数据)
详情代码如下:importrequests
frombs4importBeautifulSoup
importxlwt
importtime
# 获取第一页的内容
defget_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)
ifresponse.status_code==200:
returnresponse.text
returnNone
# 解析第一页内容, 数据结构化
defparse_one_page(html):
soup=BeautifulSoup(html,'lxml')
i=0
foriteminsoup.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 表格中
defwrite_to_excel():
f=xlwt.Workbook()
sheet1=f.add_sheet('3D',cell_overwrite_ok=True)
row0=["开奖日期","期号","个位数","十位数","百位数","单数","组选 3","组选 6","销售额","返奖比例"]
#写入第一行
forjinrange(0,len(row0)):
sheet1.write(0,j,row0[j])
#依次爬取每一页内容的每一期信息, 并将其依次写入 Excel
i=0
forkinrange(1,247):
url='http://kaijiang.zhcw.com/zhcw/html/3d/list_%s.html'%(str(k))
html=get_one_page(url)
print('正在保存第 %d 页.'%k)
#写入每一期的信息
foriteminparse_one_page(html):
sheet1.write(i+1,0,item['time'])
sheet1.write(i+1,1,item['issue'])
sheet1.write(i+1,2,item['digits'])
sheet1.write(i+1,3,item['ten_digits'])
sheet1.write(i+1,4,item['hundred_digits'])
sheet1.write(i+1,5,item['single_selection'])
sheet1.write(i+1,6,item['group_selection_3'])
sheet1.write(i+1,7,item['group_selection_6'])
sheet1.write(i+1,8,item['sales'])
sheet1.write(i+1,9,item['return_rates'])
i+=1
f.save('3D.xls')
defmain():
write_to_excel()
if__name__=='__main__':
main()
到此, 关于 14 年的福彩 3D 信息都可以爬取下来, 至于如何预测? 下一期的彩票趋势如何? 不懂也不会, 接下来是否中奖, 就靠你们了. 彩民们, 我只能帮你们到这了!
最后结尾, 关于彩票预测究竟准不准? 我不说太多的理论分析, 我只提出两个问题:
命题 1: 以双色球为例, 下一期双色球号码, 1,2,3,4,5,6,7 和 3,4,8,11,22,29,7 这两组号码的中奖概率如何? 谁高谁低还是都一样?
命题 2: 第二个问题更简单. 假设你已经投了 9 次硬币, 结果都是正面. 现在你要投第 10 次, 请问是正面的概率是多少?
如果你还要问我, 彩票有规律可循吗? 在我看来, 彩票规律就是没有规律(不信, 你去分析分析 14 年以来的所有数据), 以人类的计算水平, 即使有的话也计算不出来的. 彩票是娱乐, 是一个运气的游戏, 一个人即使在彩票上赚到了钱, 运气好, 也不代表使用的方法就可以提高彩票中奖率. 任何打着提高中奖率的期号进行的盈利行为, 即使出发点是善意的, 也会最终走向错误.
来源: http://developer.51cto.com/art/201807/578364.htm
文件上传下载:文件的上传:1、要有form标签,method=POST;2、3、Form标签的enctype属性值必须为multipart/form-data值4、在form标签中input type=file 添加上传文件5、编写服务器代码接收,处理上传数据Http协议:上传用到的类和方法:Jar包:类和方法:用fileupload的:代码实现:例:文件下载:注意点,这里应该在2、之后。文件名中文乱码 (IE和谷歌):(火狐):例
/*阶段项目案例第一部分 案例描述 案例目的学习Oracle数据库的基本概念、建库、建表、基本增删改查,复杂查询(条件、关联、复合),,同时学习数据库对象:视图、索引的使用,还有oralce独有的两个数据库对象:序列和同义词的使用方法和场合,培养学生关于数据库的设计能力与数据的操作能力。 案例难度 ★★★ 案例覆盖技能点1、 Oracle数据库基本概念2、
vue搭建地图 使用leaflet.js和esri-leaflet构建
摘要:本文是结合中等职业学校《计算机组成原理》现实教学的实际课题,在进行充分的教学分析、教学设计、系统设计的基础上,以行为主义、认知主义、建构主义、人本主义等多种学习理论为指导而设计的《计算机组成原理》课程多媒体教学课件。关键词:多媒体课件;教学设计中图分类号:G624.0 文献标识码:A文章编号:1007-9599 (2011) 12-0000-01Computer Composition Pr...
public enum EnumTest { FRANK("The given name of me"), LIU("The family name of me"); private String context; private String getContext(){ return this.context; }
WinRAR测试
直接复制两列内容到vscode就可以,后面再根据自身需要修改
分块查找又称索引顺序查找,它是顺序查找的一种改进方法。算法流程:先选取各块中的最大关键字构成一个索引表; 查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;然后,在已确定的块中用顺序法进行查找。图片借自https://blog.csdn.net/qq_27870421/article/details/106773548?utm_medium=distribute.pc_relevant.none-task-blog-title-1&spm=1001.210
导读:前两个月的币圈本是一潭死水,当区块链被国家提升为“核心技术”后,立刻成为了波澜壮阔的大海。区块链应用社区中的玩家也更加活跃了。区块链应用不失为小白用户接触区块链的一个好途径,为此,DappReview为大家筛选了最近一些值得关注的区块链应用消息。BlocklordsBlocklords是一款区块链策略游戏,玩家扮演中世纪的领主,四处征战,最后一统江湖。Blocklords的中世纪画风很有特点...
1 问题描述我们利用LATEX\LaTeX写论文时往往会展现一些程序的关键代码,以清晰地表达自己的思想。虽然不建议大段大段的展现,这样有放水的嫌疑,但是在思想表达的关键点展现关键的代码是可以的,也是不可避免和无可非议的。通常情况下,一篇论文只展现一种语言也就够了。但是现代网络化的迅速发展,往往是多兵种联合作战,那种从头到尾一直使用一种语言的时代已经过去了。反映在论文的写作上,你就可能在同一篇论文中展
SVN迁移简单操作步骤 终于还是不幸的做了一次svn服务器的迁移工作。原来的那台LINUX服务器要被重装,只好被整体服务迁移到Windows平台下。原理部分,以前转过来一个帖子,看起来实在是复杂。今天实际操作了一把,还是蛮简单的1。把原来的Repository完整导出成一个dump文件svnadmin dump old/repo/path > dumpfile其中old/repo/path是老机器上版本库所在的位置,我机器上是默认的/etc/svn/repo/XXX文件夹;dumpfile就起个和项目相
知识点jquery 的引入方式本地下载引入在线引入children 只获取子元素,不获取孙元素show() 显示、 hide() 隐藏。完整代码<!--Author: XiaoWenCreate a file: 2017-02-27 11:24:01Last modified: 2017-02-27 17:16:06Start to work:Fin...