利用EntityFramework获得双色球数据库

php中文网
发布: 2016-06-07 15:00:01
原创
1954人浏览过

双色球想必大家都很熟悉了,尽管屡买屡不中,但还是会买。以前就想过利用双色球的走势图得到双色球的数据库,至于得到数据库干什么倒没想过,不过对以往号码有没有重复出现还是挺好奇的。最近写Entity Framework的博客,所以这篇文章的标题里就出现了Entity F

双色球想必大家都很熟悉了,尽管屡买屡不中,但还是会买。以前就想过利用双色球的走势图得到双色球的数据库,至于得到数据库干什么倒没想过,不过对以往号码有没有重复出现还是挺好奇的。最近写entity framework的博客,所以这篇文章的标题里就出现了entity framework的身影,其实entity framework在下面的程序里只占据了很少的一部分。

下面开始介绍我获取数据库的方法。

双色球的走势图网址:http://zx.caipiao.163.com/trend/ssq_basic.html

打开之后,如下图所示,默认显示的是最近30期的:

利用EntityFramework获得双色球数据库

根据期号进行查询,可以得到如下的链接:

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的结构。

利用EntityFramework获得双色球数据库

下面给出获取

之间内容的代码:

<span>   1:  </span>        <span>/// <summary></span>
登录后复制
登录后复制
<span>   2:  </span>        <span>/// 获取网页的双色球数据</span>
登录后复制
<span>   3:  </span>        <span>/// </summary></span>
登录后复制
登录后复制
<span>   4:  </span>        <span>/// <param name="startQH">开始期号</param></span>
登录后复制
<span>   5:  </span>        <span>/// <param name="endQH">截止期号</param></span>
登录后复制
<span>   6:  </span>        <span>/// <returns></returns></span>
登录后复制
<span>   7:  </span>        <span>private</span> <span>string</span> GetOriginData(<span>string</span> startQH, <span>string</span> endQH)
登录后复制
<span>   8:  </span>        {
登录后复制
<span>   9:  </span>            <span>string</span> path = <span>string</span>.Format(<span>"http://zx.caipiao.163.com/trend/ssq_basic.html?beginPeriod={0}&endPeriod={1}"</span>, startQH, endQH);
登录后复制
<span>  10:  </span>            WebRequest wp = WebRequest.Create(path);
登录后复制
<span>  11:  </span>            Stream s = wp.GetResponse().GetResponseStream();
登录后复制
<span>  12:  </span>            StreamReader sr = <span>new</span> StreamReader(s);
登录后复制
<span>  13:  </span>            <span>string</span> content = sr.ReadToEnd();
登录后复制
<span>  14:  </span>            sr.Close();
登录后复制
<span>  15:  </span>            s.Close();
登录后复制
<span>  16:  </span>            <span>int</span> startIndex = content.IndexOf(<span>"<tbody id=\"cpdata\">"</span>);
登录后复制
<span>  17:  </span>            <span>int</span> endIndex = content.IndexOf(<span>"</tbody>"</span>);
登录后复制
<span>  18:  </span>            content = content.Substring(startIndex, endIndex - startIndex).Replace(<span>"<tr class=\"bg_doe\" >"</span>, <span>"<tr>"</span>).Replace(<span>"<tr >"</span>, <span>"<tr>"</span>).Replace(<span>"\r\n"</span>, <span>""</span>);
登录后复制
<span>  19:  </span>            <span>return</span> content;
登录后复制
<span>  20:  </span>        }
登录后复制

中的内容就是和了,下面给出解析和的代码,有注释,就不多解释了。

<span>   1:  </span>        <span>/// <summary></span>
登录后复制
登录后复制
<span>   2:  </span>        <span>/// 循环解析Tr</span>
登录后复制
<span>   3:  </span>        <span>/// </summary></span>
登录后复制
登录后复制
<span>   4:  </span>        <span>/// <param name="wnRepo"></param></span>
登录后复制
<span>   5:  </span>        <span>/// <param name="content"><tbody></tbody>之间的内容</param></span>
登录后复制
<span>   6:  </span>        <span>private</span> <span>void</span> ResolveTr(IRepository<WinNo> wnRepo, <span>string</span> content)
登录后复制
<span>   7:  </span>        {
登录后复制
<span>   8:  </span>            <span>string</span> trContent = <span>string</span>.Empty;
登录后复制
<span>   9:  </span>            WinNo wn = <span>null</span>;
登录后复制
<span>  10:  </span>            Regex regex = <span>new</span> Regex(<span>"<tr>"</span>);
登录后复制
<span>  11:  </span>            <span>//在<tbody></tbody>之间的内容搜索所有匹配<tr>的项</span>
登录后复制
<span>  12:  </span>            MatchCollection matches = regex.Matches(content);
登录后复制
<span>  13:  </span>            <span>foreach</span> (Match item <span>in</span> matches)
登录后复制
<span>  14:  </span>            {
登录后复制
<span>  15:  </span>                wn = <span>new</span> WinNo();
登录后复制
<span>  16:  </span>                <span>//如果当前匹配项的下一个匹配项的值不为空</span>
登录后复制
<span>  17:  </span>                <span>if</span> (!<span>string</span>.IsNullOrEmpty(item.NextMatch().Value))
登录后复制
<span>  18:  </span>                {
登录后复制
<span>  19:  </span>                    trContent = content.Substring(item.Index, item.NextMatch().Index - item.Index);
登录后复制
<span>  20:  </span>                }
登录后复制
<span>  21:  </span>                <span>//最后一个<tr>的匹配项</span>
登录后复制
<span>  22:  </span>                <span>else</span>
登录后复制
<span>  23:  </span>                {
登录后复制
<span>  24:  </span>                    trContent = content.Substring(item.Index, content.Length - item.Index);
登录后复制
<span>  25:  </span>                }
登录后复制
<span>  26:  </span>                ResolveTd(wn, trContent);
登录后复制
<span>  27:  </span>                wnRepo.Insert(wn);
登录后复制
<span>  28:  </span>            }
登录后复制
<span>  29:  </span>        }
登录后复制
<span>  30:  </span>        <span>/// <summary></span>
登录后复制
<span>  31:  </span>        <span>/// 在一个TR中,解析TD,获取一期的号码</span>
登录后复制
<span>  32:  </span>        <span>/// </summary></span>
登录后复制
<span>  33:  </span>        <span>/// <param name="wn"></param></span>
登录后复制
<span>  34:  </span>        <span>/// <param name="trContent"></param></span>
登录后复制
<span>  35:  </span>        <span>private</span> <span>void</span> ResolveTd(WinNo wn, <span>string</span> trContent)
登录后复制
<span>  36:  </span>        {
登录后复制
<span>  37:  </span>            <span>//匹配期号的表达式</span>
登录后复制
<span>  38:  </span>            <span>string</span> patternQiHao = <span>"<td align=\"center\" title=\"开奖日期"</span>;
登录后复制
<span>  39:  </span>            Regex regex = <span>new</span> Regex(patternQiHao);
登录后复制
<span>  40:  </span>            Match qhMatch = regex.Match(trContent);
登录后复制
<span>  41:  </span>            wn.QiHao = trContent.Substring(qhMatch.Index + 17 + patternQiHao.Length, 7);
登录后复制
<span>  42:  </span>            <span>//匹配蓝球的表达式</span>
登录后复制
<span>  43:  </span>            <span>string</span> patternChartBall02 = <span>"<td class=\"chartBall02\">"</span>;
登录后复制
<span>  44:  </span>            regex = <span>new</span> Regex(patternChartBall02);
登录后复制
<span>  45:  </span>            Match bMatch = regex.Match(trContent);
登录后复制
<span>  46:  </span>            wn.B = Convert.ToInt32(trContent.Substring(bMatch.Index + patternChartBall02.Length, 2));
登录后复制
<span>  47:  </span>            <span>//存放匹配出来的红球号码</span>
登录后复制
<span>  48:  </span>            redBoxList = <span>new</span> List<<span>int</span>>();
登录后复制
<span>  49:  </span>            <span>//匹配红球的表达式</span>
登录后复制
<span>  50:  </span>            <span>string</span> patternChartBall01 = <span>"<td class=\"chartBall01\">"</span>;
登录后复制
<span>  51:  </span>            regex = <span>new</span> Regex(patternChartBall01);
登录后复制
<span>  52:  </span>            MatchCollection rMatches = regex.Matches(trContent);
登录后复制
<span>  53:  </span>            <span>foreach</span> (Match r <span>in</span> rMatches)
登录后复制
<span>  54:  </span>            {
登录后复制
<span>  55:  </span>                redBoxList.Add(Convert.ToInt32(trContent.Substring(r.Index + patternChartBall01.Length, 2)));
登录后复制
<span>  56:  </span>            }
登录后复制
<span>  57:  </span>            <span>//匹配红球的表达式</span>
登录后复制
<span>  58:  </span>            <span>string</span> patternChartBall07 = <span>"<td class=\"chartBall07\">"</span>;
登录后复制
<span>  59:  </span>            regex = <span>new</span> Regex(patternChartBall07);
登录后复制
<span>  60:  </span>            rMatches = regex.Matches(trContent);
登录后复制
<span>  61:  </span>            <span>foreach</span> (Match r <span>in</span> rMatches)
登录后复制
<span>  62:  </span>            {
登录后复制
<span>  63:  </span>                redBoxList.Add(Convert.ToInt32(trContent.Substring(r.Index + patternChartBall07.Length, 2)));
登录后复制
<span>  64:  </span>            }
登录后复制
<span>  65:  </span>            <span>//排序红球号码</span>
登录后复制
<span>  66:  </span>            redBoxList.Sort();
登录后复制
<span>  67:  </span>            <span>//第一个红球号码</span>
登录后复制
<span>  68:  </span>            wn.R1 = redBoxList[0];
登录后复制
<span>  69:  </span>            <span>//第二个红球号码</span>
登录后复制
<span>  70:  </span>            wn.R2 = redBoxList[1];
登录后复制
<span>  71:  </span>            wn.R3 = redBoxList[2];
登录后复制
<span>  72:  </span>            wn.R4 = redBoxList[3];
登录后复制
<span>  73:  </span>            wn.R5 = redBoxList[4];
登录后复制
<span>  74:  </span>            wn.R6 = redBoxList[5];
登录后复制
<span>  75:  </span>        }
登录后复制

下面给出使用到Entity Framework部分的代码:

首先,新建一个WinNo实体,用于表示双色球信息:

<span>   1:  </span>    <span>public</span> <span>class</span> WinNo
登录后复制
<span>   2:  </span>    {
登录后复制
登录后复制
<span>   3:  </span>        <span>/// <summary></span>
登录后复制
<span>   4:  </span>        <span>/// 主键</span>
登录后复制
<span>   5:  </span>        <span>/// </summary></span>
登录后复制
<span>   6:  </span>        <span>public</span> <span>int</span> ID { get; set; }
登录后复制
<span>   7:  </span>        <span>/// <summary></span>
登录后复制
<span>   8:  </span>        <span>/// 期号</span>
登录后复制
<span>   9:  </span>        <span>/// </summary></span>
登录后复制
<span>  10:  </span>        <span>public</span> <span>string</span> QiHao { get; set; }
登录后复制
<span>  11:  </span>&#160;
登录后复制
<span>  12:  </span>        <span>/// <summary></span>
登录后复制
<span>  13:  </span>        <span>/// 第一个红球号码</span>
登录后复制
<span>  14:  </span>        <span>/// </summary></span>
登录后复制
<span>  15:  </span>        <span>public</span> <span>int</span> R1 { get; set; }
登录后复制
<span>  16:  </span>        <span>/// <summary></span>
登录后复制
<span>  17:  </span>        <span>/// 第二个红球号码</span>
登录后复制
<span>  18:  </span>        <span>/// </summary></span>
登录后复制
<span>  19:  </span>        <span>public</span> <span>int</span> R2 { get; set; }
登录后复制
<span>  20:  </span>        <span>/// <summary></span>
登录后复制
<span>  21:  </span>        <span>/// 第三个红球号码</span>
登录后复制
<span>  22:  </span>        <span>/// </summary></span>
登录后复制
<span>  23:  </span>        <span>public</span> <span>int</span> R3 { get; set; }
登录后复制
<span>  24:  </span>        <span>/// <summary></span>
登录后复制
<span>  25:  </span>        <span>/// 第四个红球号码</span>
登录后复制
<span>  26:  </span>        <span>/// </summary></span>
登录后复制
<span>  27:  </span>        <span>public</span> <span>int</span> R4 { get; set; }
登录后复制
<span>  28:  </span>        <span>/// <summary></span>
登录后复制
<span>  29:  </span>        <span>/// 第五个红球号码</span>
登录后复制
<span>  30:  </span>        <span>/// </summary></span>
登录后复制
<span>  31:  </span>        <span>public</span> <span>int</span> R5 { get; set; }
登录后复制
<span>  32:  </span>        <span>/// <summary></span>
登录后复制
<span>  33:  </span>        <span>/// 第六个红球号码</span>
登录后复制
<span>  34:  </span>        <span>/// </summary></span>
登录后复制
<span>  35:  </span>        <span>public</span> <span>int</span> R6 { get; set; }
登录后复制
<span>  36:  </span>        <span>/// <summary></span>
登录后复制
<span>  37:  </span>        <span>/// 篮球号码</span>
登录后复制
<span>  38:  </span>        <span>/// </summary></span>
登录后复制
<span>  39:  </span>        <span>public</span> <span>int</span> B { get; set; }
登录后复制
<span>  40:  </span>    }
登录后复制

其次,使用默认配置即可。

第三,新建一个上下文:SSQContext,代码如下:

<span>   1:  </span>    <span>public</span> <span>class</span> SSQContext : DbContext
登录后复制
<span>   2:  </span>    {
登录后复制
登录后复制
<span>   3:  </span>        <span>public</span> SSQContext()
登录后复制
<span>   4:  </span>        {
登录后复制
<span>   5:  </span>            <span>//Database.SetInitializer(new DropCreateDatabaseAlways<SSQContext>());</span>
登录后复制
<span>   6:  </span>            Database.SetInitializer<SSQContext>(<span>null</span>);
登录后复制
<span>   7:  </span>        }
登录后复制
<span>   8:  </span>&#160;
登录后复制
<span>   9:  </span>        <span>public</span> DbSet<WinNo> WinNos { get; set; }
登录后复制
<span>  10:  </span>&#160;
登录后复制
<span>  11:  </span>        <span>protected</span> <span>override</span> <span>void</span> OnModelCreating(DbModelBuilder modelBuilder)
登录后复制
<span>  12:  </span>        {
登录后复制
<span>  13:  </span>            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
登录后复制
<span>  14:  </span>            <span>base</span>.OnModelCreating(modelBuilder);
登录后复制
<span>  15:  </span>        }
登录后复制
<span>  16:  </span>    }
登录后复制

第四,运行程序,结果如下图所示:

利用EntityFramework获得双色球数据库

本程序的源代码下载地址为:http://www.ef-community.com/forum.php?mod=viewthread&tid=44&extra=page%3D1

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号