作者:午夜呻吟的诱惑 | 来源:互联网 | 2017-05-12 15:45
双色球想必大家都很熟悉了,尽管屡买屡不中,但还是会买。以前就想过利用双色球的走势图得到双色球的数据库,至于得到数据库干什么倒没想过,不过对以往号码有没有重复出现还是挺好奇的。最近写EntityFramework的博客,所以这篇文章的标题里就出现了EntityF
双色球想必大家都很熟悉了,尽管屡买屡不中,但还是会买。以前就想过利用双色球的走势图得到双色球的数据库,至于得到数据库干什么倒没想过,不过对以往号码有没有重复出现还是挺好奇的。最近写Entity Framework的博客,所以这篇文章的标题里就出现了Entity F
双色球想必大家都很熟悉了,尽管屡买屡不中,但还是会买。以前就想过利用双色球的走势图得到双色球的数据库,至于得到数据库干什么倒没想过,不过对以往号码有没有重复出现还是挺好奇的。最近写Entity Framework的博客,所以这篇文章的标题里就出现了Entity Framework的身影,其实Entity Framework在下面的程序里只占据了很少的一部分。
下面开始介绍我获取数据库的方法。
双色球的走势图网址:http://zx.caipiao.163.com/trend/ssq_basic.html
打开之后,如下图所示,默认显示的是最近30期的:
根据期号进行查询,可以得到如下的链接:
http://zx.caipiao.163.com/trend/ssq_basic.html?beginPeriod=2012110&endPeriod=2012139&historyPeriod=2012140&year=
很容易可以发现beginPeriod表示的是开始期号,endPeriod表示的截止期号。有了这两个参数,就可以得到任意期号的数据了。根据上述方法查询,得到网易彩票提供的最早数据是2004009期。
下面分析走势图的html结构。
谷歌浏览器中,按Ctrl+Shift+i 或Firefox中使用Firebug可查看html的结构。
下面给出获取
之间内容的代码:
1: ///
2: /// 获取网页的双色球数据
3: ///
4: /// 开始期号
5: /// 截止期号
6: ///
7: private string GetOriginData(string startQH, string endQH)
8: {
9: string path = string.Format("http://zx.caipiao.163.com/trend/ssq_basic.html?beginPeriod={0}&endPeriod={1}", startQH, endQH);
10: WebRequest wp = WebRequest.Create(path);
11: Stream s = wp.GetResponse().GetResponseStream();
12: StreamReader sr = new StreamReader(s);
13: string cOntent= sr.ReadToEnd();
14: sr.Close();
15: s.Close();
16: int startIndex = content.IndexOf("");
17: int endIndex = content.IndexOf("
");
18: cOntent= content.Substring(startIndex, endIndex - startIndex).Replace("", "").Replace("", "").Replace("\r\n", "");
19: return content;
20: }
中的内容就是
和 | 了,下面给出解析
和的代码,有注释,就不多解释了。
1: ///
2: /// 循环解析Tr
3: ///
4: ///
5: /// 之间的内容
6: private void ResolveTr(IRepository wnRepo, string content)
7: {
8: string trCOntent= string.Empty;
9: WinNo wn = null;
10: Regex regex = new Regex("");
11: //在之间的内容搜索所有匹配的项
12: MatchCollection matches = regex.Matches(content);
13: foreach (Match item in matches)
14: {
15: wn = new WinNo();
16: //如果当前匹配项的下一个匹配项的值不为空
17: if (!string.IsNullOrEmpty(item.NextMatch().Value))
18: {
19: trCOntent= content.Substring(item.Index, item.NextMatch().Index - item.Index);
20: }
21: //最后一个的匹配项
22: else
23: {
24: trCOntent= content.Substring(item.Index, content.Length - item.Index);
25: }
26: ResolveTd(wn, trContent);
27: wnRepo.Insert(wn);
28: }
29: }
30: ///
31: /// 在一个TR中,解析TD,获取一期的号码
32: ///
33: ///
34: ///
35: private void ResolveTd(WinNo wn, string trContent)
36: {
37: //匹配期号的表达式
38: string patternQiHao = ";
39: Regex regex = new Regex(patternQiHao);
40: Match qhMatch = regex.Match(trContent);
41: wn.QiHao = trContent.Substring(qhMatch.Index + 17 + patternQiHao.Length, 7);
42: //匹配蓝球的表达式
43: string patternChartBall02 = "";
44: regex = new Regex(patternChartBall02);
45: Match bMatch = regex.Match(trContent);
46: wn.B = Convert.ToInt32(trContent.Substring(bMatch.Index + patternChartBall02.Length, 2));
47: //存放匹配出来的红球号码
48: redBoxList = new List<int>();
49: //匹配红球的表达式
50: string patternChartBall01 = "";
51: regex = new Regex(patternChartBall01);
52: MatchCollection rMatches = regex.Matches(trContent);
53: foreach (Match r in rMatches)
54: {
55: redBoxList.Add(Convert.ToInt32(trContent.Substring(r.Index + patternChartBall01.Length, 2)));
56: }
57: //匹配红球的表达式
58: string patternChartBall07 = "";
59: regex = new Regex(patternChartBall07);
60: rMatches = regex.Matches(trContent);
61: foreach (Match r in rMatches)
62: {
63: redBoxList.Add(Convert.ToInt32(trContent.Substring(r.Index + patternChartBall07.Length, 2)));
64: }
65: //排序红球号码
66: redBoxList.Sort();
67: //第一个红球号码
68: wn.R1 = redBoxList[0];
69: //第二个红球号码
70: wn.R2 = redBoxList[1];
71: wn.R3 = redBoxList[2];
72: wn.R4 = redBoxList[3];
73: wn.R5 = redBoxList[4];
74: wn.R6 = redBoxList[5];
75: }
下面给出使用到Entity Framework部分的代码:
首先,新建一个WinNo实体,用于表示双色球信息:
1: public class WinNo
2: {
3: ///
4: /// 主键
5: ///
6: public int ID { get; set; }
7: ///
8: /// 期号
9: ///
10: public string QiHao { get; set; }
11: &#160;
12: ///
13: /// 第一个红球号码
14: ///
15: public int R1 { get; set; }
16: ///
17: /// 第二个红球号码
18: ///
19: public int R2 { get; set; }
20: ///
21: /// 第三个红球号码
22: ///
23: public int R3 { get; set; }
24: ///
25: /// 第四个红球号码
26: ///
27: public int R4 { get; set; }
28: ///
29: /// 第五个红球号码
30: ///
31: public int R5 { get; set; }
32: ///
33: /// 第六个红球号码
34: ///
35: public int R6 { get; set; }
36: ///
37: /// 篮球号码
38: ///
39: public int B { get; set; }
40: }
其次,使用默认配置即可。
第三,新建一个上下文:SSQContext,代码如下:
1: public class SSQContext : DbContext
2: {
3: public SSQContext()
4: {
5: //Database.SetInitializer(new DropCreateDatabaseAlways());
6: Database.SetInitializer(null);
7: }
8: &#160;
9: public DbSet WinNos { get; set; }
10: &#160;
11: protected override void OnModelCreating(DbModelBuilder modelBuilder)
12: {
13: modelBuilder.Conventions.Remove();
14: base.OnModelCreating(modelBuilder);
15: }
16: }
第四,运行程序,结果如下图所示:
本程序的源代码下载地址为:http://www.ef-community.com/forum.php?mod=viewthread&tid=44&extra=page%3D1
推荐阅读
-
本文目录一览:1、如何php将一个动态的数组转换为json的格式 ...
[详细]
蜡笔小新 2023-09-25 15:55:39
-
本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ...
[详细]
蜡笔小新 2023-12-13 20:01:16
-
-
web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ...
[详细]
蜡笔小新 2023-12-11 11:25:16
-
JavaWeb介绍概念JavaWeb,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。Java在客户端的应用有javaapplet,不过使 ...
[详细]
蜡笔小新 2023-10-16 00:39:28
-
from:http:www.myquickphp.comarchives147(请求的跨域服务器不支持常规”?”查询请求时的解决方案)昨天第一次做VIP需求时,发现一 ...
[详细]
蜡笔小新 2023-10-12 19:55:47
-
Web前端开发源于传统的互联网,互联网普及让人才需求量居高不下,随着移动互联网的高速发展,移动终端的前端开发也越来越受到重视, ...
[详细]
蜡笔小新 2023-10-12 14:13:27
-
后端开发|php教程不明白,移植,事情后端开发-php教程为什么我客户端通过http请求服务端服务端发张图片到客户端这个传输为什么那么慢一共也就300多kb但一共传了5秒多如果直接 ...
[详细]
蜡笔小新 2023-10-12 10:30:08
-
本文是《JavaScript深度解析》系列文章第23篇(共51篇)文档对象模 ...
[详细]
蜡笔小新 2023-10-11 22:37:09
-
一直感觉CSDN社区的树形结构特别的人性化,直观化。最近做系统的时候需要用到这个树形结构,于是模仿CSDN的树形结构做了一个自己的树形结构, ...
[详细]
蜡笔小新 2023-10-10 16:17:11
-
sapiCache是一款自动为网站生成静态页面的IIS组件(ISAPI筛选器),静态页面可以有效的加快网站访问速度,大大减轻服务器负担。工作原理是组件把服务器返回给客户端的网页源码保存起来,生成静态文 ...
[详细]
蜡笔小新 2023-10-10 13:38:45
-
SeleniumWebDriver3.0自动化测试框架实战指南 ...
[详细]
蜡笔小新 2023-10-10 05:23:15
-
今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ...
[详细]
蜡笔小新 2023-12-14 17:58:15
-
本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ...
[详细]
蜡笔小新 2023-12-09 19:58:36
-
一、用户行为三剑客以下3个CSS属性:user-select属性可以设置是否允许用户选择页面中的图文内容;user-modify属性可以设置是否允许输入 ...
[详细]
蜡笔小新 2023-10-17 14:35:15
-
有哪些PHP调试技巧?:回复内容:我目前遇到的最让我称赞的debug方式是:xdebug的xdebug_start_trace();*业务代码*xdebug_stop_trace( ...
[详细]
蜡笔小新 2023-09-25 13:00:56
-
| | | | |