足球大数据查询 (足球大数据平台)

看球这么多年来,一直是在看国内几个网站上的比赛数据,包括球员信息、两队比赛进球数、哪个球员进的球、进球方式是什么。所以最后慢慢的形成了自己的一个思维模式,越到后面就越想让这些比赛的数据可以自动汇总起来。比如有这么一个场景:在周三的晚上,我们回到了家里,正好没有事情,打开电脑,此时电脑的桌面上会弹出一个界面,里面汇总了本周已经结束的五大联赛的比赛进球集锦,可以汇总出我们关注的球队最近比赛的进球者。最为关键的是,会自动汇总出下一场比赛,哪个球员再的一次黄牌就会红牌停赛,哪个球员累计黄牌够了,本场需要停赛。就在此时,我们突然发现有几场比赛有冷门的倾向,此时系统又回给我们自动汇总出这几场比赛的开盘数据、历史数据对比等等,也许里面会有一些类似的地方,如果我们能结合球队最近比赛的视频和数据分析,那对比赛的把握程度应该是很好了。

足球比赛实时大数据可视化分析,足球智能大数据推荐

比如我们会把这样图表自动给我们收集回来,不用我们在去每个网站去一个个找,这样就可以省很多时间。所以我们就需要做一些编程的工作,把这些底层的数据都采集回来。

足球比赛实时大数据可视化分析,足球智能大数据推荐

其实最终采集回来的这些数据还是静态的,这不能给我们提供什么,还需要我们去加工,这就涉及到一系列的工作了,今天我们的第一步就是先把数据采集回来:

string selectDateTime = "SELECT * from [Table_DateTime] where [TimeNode]>='2016-10-20' and [TimeNode]<='2016-11-16' ";

DataTable dataTime = SqlHelper.ExecuteDataSet(CommandType.Text, selectDateTime).Tables[0];

if (dataTime.Rows.Count > 0)

{

foreach (DataRow dr in dataTime.Rows)

{

string id=dr["id"].ToString();

DateTime timeNode = Convert.ToDateTime(dr["TimeNode"].ToString());

InsertData(timeNode.ToString("yyyy-MM-dd"), id);

}

}

public void InsertData(string selectDateTime,string idValue)

{

string dateTime = selectDateTime;

string htmlUrl = "http://odds.500.com/europe_jczq_" + dateTime + ".shtml";

string htmlContent = FCode.HttpHelper.SendGet(htmlUrl);

Regex reg = new Regex("\\r|\\t|\\n|\\a");

string htmlContentRe = reg.Replace(htmlContent, "");

HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();

doc.LoadHtml(htmlContentRe);

//获取存储数据的容器内的数据,这里是table 标签里的 tbody

var mainTbody = doc.DocumentNode.SelectSingleNode(@"//*[@id='main-tbody']");

if (mainTbody != null)

{

//获取所有行

var list = mainTbody.SelectNodes(@"tr");

//如果获取的是table,就需要移除第一行表头

//list.RemoveAt(0);

//遍历每一行,获取需要的数据

if (list != null)

{

StringBuilder sqlField = new StringBuilder();

var trID = "";

for (int trData = 0; trData < list.Count; trData++)

{

trID = list[trData].Attributes[0].Value;

var tdList = list[trData].SelectNodes(@"td");

for (int tdData = 0; tdData < tdList.Count; tdData++)

{

//第一行数据

if (tdList.Count == 16)

{

if (tdData != 3 && tdData != 10 && tdData != 11 && tdData != 12 && tdData != 13 && tdData != 14)

{

var firstData = tdList[tdData].InnerText.Replace("\r\n", "").Replace(" ", "").Trim();

//sqlInsert.AppendFormat("'{0}',", firstData);

if (tdData == 7 || tdData == 8 || tdData == 9)

{

sqlField.AppendFormat("{0},", firstData);

}

else

{

if (tdData == 15)

{

var OuZhouHtml = tdList[tdData].InnerHtml;

string dataResult = "";

Regex regHtml = new Regex(@"(?is)<a[^>]*?href=(['""\s]?)(?<href>[^'""\s]*)\1[^>]*?>");

MatchCollection match = regHtml.Matches(OuZhouHtml);

foreach (Match m in match)

{

dataResult += m.Groups["href"].Value + ",";

}

string[] arrayHref = dataResult.Split(',');

string OuZhouHtmlNew = "";

for (int i = 0; i < arrayHref.Length; i++)

{

OuZhouHtmlNew = arrayHref[2].ToString();

}

sqlField.AppendFormat("'{0}',", OuZhouHtmlNew);

}

else

{

sqlField.AppendFormat("'{0}',", firstData);

}

}

}

}

//第二行数据

if (tdList.Count == 8)

{

if (tdData != 3 && tdData != 4 && tdData != 5 && tdData != 6 && tdData != 7 && tdData != 8)

{

var secondData = tdList[tdData].InnerText.Replace("\r\n", "").Replace(" ", "").Trim();

sqlField.AppendFormat("{0},", secondData);

}

}

}//列数据

if (tdList.Count == 8)

{

sqlField.AppendFormat("{0},", trID);

sqlField.AppendFormat("'{0}')", dateTime);

}

if (tdList.Count == 8)

{

//存入数据库

StringBuilder sqlInsert = new StringBuilder();

sqlInsert.Append(@"INSERT INTO [tb_FootballMatch](

[ChagnCi]

,[SaiShi]

,[LunCi]

,[ZhuChangQiuDui]

,[BiFen]

,[KeChangQiuDui]

,[ChuSheng]

,[ChuPing]

,[ChuFu]

,[OuZhouHtml],[ZhongSheng],[ZhongPing],[ZhongFu],[ChangCiId],[BiSaiShiJiang])VALUES(");

string sql = sqlInsert.ToString() + sqlField.ToString();

SqlHelper.ExecteNonQuery(CommandType.Text, sql);

sqlField = new StringBuilder();

}

}//行数据

//MessageBox.Show("数据存储成功");

string sqlUpdateFootballMatch = "UPDATE [Table_DateTime] SET [valueResault] ='" + selectDateTime + "数据录入成功',[IsInput] =1 WHERE id=" + idValue + "";

SqlHelper.ExecteNonQuery(CommandType.Text, sqlUpdateFootballMatch);

Thread.Sleep(60000);

}

else

{

string sqlUpdateFootballMatchNull = "UPDATE [Table_DateTime] SET [valueResault] ='" + selectDateTime + "无数据',[IsInput] =1 WHERE id=" + idValue + "";

SqlHelper.ExecteNonQuery(CommandType.Text, sqlUpdateFootballMatchNull);

Thread.Sleep(60000);

//MessageBox.Show("当前时间没有数据");

}

}

else

{

//记录下无数据的时间

//MessageBox.Show("main-tbody不完整");

}

}

两百多行的代码就把足球比赛基础的数据采集回来,这不难,后期的数据细化分类才是重点。

足球比赛实时大数据可视化分析,足球智能大数据推荐