使用c#建立奥运奖牌榜
使用c#建立奥运奖牌榜,效果如下图,里面的部分方法经常用到,故记录一下,以便查阅
一、获取奖牌数据
腾讯给我们提供了一个奥运奖牌榜:
https://2020.qq.com/medal.html
我们需要从这个页面爬取数据
一般来说,这样的页面,都有单独的数据来源页供我们使用,所以我们需要找出这个数据地址。
打开浏览器调试工具F12,找到network一项,刷新页面,即可看到页面数据信息,我们向下慢慢寻找过去。
寻找的时候,点击一项,即可在右边看到文件内容,我们猜测,页面应该是通过JSON传递数据的,而这个JS里面都是代码,并没有有和奥运相关的内容,显然不是我们需要的数据。
找到一项的时候,很可疑,从右边明显能看到一些奥运数据,并且通过页面显示形式,可以确定这是一个JSON数据。
将他展开,能看到,选项中,罗列了所有的信息,正是网页列表中的榜单信息,数据里面包括,总牌数,金银铜数量,国家名称,以及国旗图片等等。
切换到详细信息可以看到,这是一个get请求,地址为:
https://app.sports.qq.com/tokyoOly/medalsList?from=h5&medalsType=all&callback=jQuery111308660282144735172_1627806149492&_=1627806149493
尝试去除里面的参数,访问没有问题
https://app.sports.qq.com/tokyoOly/medalsList
说明这个地址,就是我们要的数据地址,直接打开,会直接得到一个JSON
将内容全部复制下来,放到JSON解析工具里面解析,可以很清晰的看到字段key,我们后面可以通过解析JSON的方式来获取相关的数据。
现在,就很明了了,我们只需要,爬取这个网页->获得奖牌JSON数据->解析数据->显示到网页
就能制作出我们想要的榜单了。
二,写程式
get方式获取JSON数据
使用GetHttpResponse传参获取JSON数据res,如下。
string url = "https://app.sports.qq.com/tokyoOly/medalsList";
int statusCode = 0;
string res = GetHttpResponse(url, 6000, out statusCode);
public static string GetHttpResponse(string url, int Timeout, out int statusCode){HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);request.Method = "GET";request.ContentType = "text/html;charset=UTF-8";request.UserAgent = null;request.Timeout = Timeout;HttpWebResponse response = (HttpWebResponse)request.GetResponse();Stream myResponseStream = response.GetResponseStream();statusCode = (int)response.StatusCode;StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));string retString = myStreamReader.ReadToEnd();myStreamReader.Close();myResponseStream.Close();return retString;}
观察已有的json数据组织方式(上面的JSON Format 1.0软件有解析组织,没有这个软件的话可以百度下载,也可以在这下载我有上传),根据字符串的数据结构创建类
public class Data{public string bronze { get; set; }public string gold { get; set; }public string nocBronzeRank { get; set; }public string nocGoldRank { get; set; }public string nocid { get; set; }public string nocLogo { get; set; }public string nocName { get; set; }public string nocRank { get; set; }public string nocShortName { get; set; }public string nocSilverRank { get; set; }public string nocUrl { get; set; }public string silver { get; set; }public string total { get; set; }}
反序列化json数组
JObject jo = (JObject)JsonConvert.DeserializeObject(res);
string country_num = jo["data"]["data"]["total"].ToString(); //获取国家数量
List<Data> jobInfoList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Data>>(country_num);
填充tabale就可以显示在网页了,效果如下图,也可以直接打印出来都是可以的。
// 設置表格列屬性table.Columns.Add("排名", 100, ALIGN.Left);table.Columns.Add("國家", 100, ALIGN.Left);table.Columns.Add("金牌", 50, ALIGN.Left);table.Columns.Add("銀牌", 50, ALIGN.Left);table.Columns.Add("銅牌", 50, ALIGN.Left);table.Columns.Add("總獎牌", 50, ALIGN.Left);// 設置表格行數據int nNum = 1; //排名序号foreach (Data jobInfo in jobInfoList){int c = 0;GvNet.HtmlTable.Row row = table.NewRow();row[c++].Value = nNum.ToString();row[c++].Value = "<img loading=\"lazy\" src=\"" + jobInfo.nocLogo + "\" alt=\"Smiley face\" width=\"20\" >" + jobInfo.nocName; row[c++].Value = jobInfo.gold;row[c++].Value = jobInfo.silver;row[c++].Value = jobInfo.bronze;row[c++].Value = jobInfo.total;table.Rows.Add(row);nNum++;}
千里之行始于足下,愿共勉之!
使用c#建立奥运奖牌榜相关推荐
- mysql建立联合索引,mysql建立唯一键,mysql如何解决重复记录联合索引
在项目中,常常要用到联合唯一 在一些配置表中,一些列的组合成为一条记录. 比如,在游戏中,游戏的分区和用户id会形成一条记录.(比如,一个qq用户可以在艾欧尼亚.德玛西亚创建两个账号) 添加联 ...
- Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)
1. 示例 1 package main import ("context""fmt""go.etcd.io/etcd/clientv3"& ...
- 在idea使用maven工程建立web项目时,启动Tomcat访问不到项目首页。
在idea使用maven工程建立web项目时,启动Tomcat访问不到项目首页,输入URL:http://localhost:8080/时一片空白也不报错 ,按下面步骤检查: 1.看下这几个地方是否配 ...
- 推理芯片的性能建立在优化的存储子系统设计上
推理芯片的性能建立在优化的存储子系统设计上 Inference chip performance builds on optimized memory subsystem design 好的推断芯片可 ...
- 接触追踪解决方案建立在UWB而不是蓝牙上
接触追踪解决方案建立在UWB而不是蓝牙上 Contact tracing solution builds on UWB rather than Bluetooth 几个月前,当社会距离明显成为对抗CO ...
- Windows窗口的建立
Windows窗口的建立 预备知识 DC CreateCompatibleDC() CreateDIBSection() SelectObject() BitBlt() CODE 设备上下文 (简称为 ...
- 建立一个php 基础类
在些PHP文件的时候,一般首先都是要先写一下基础类: 主要包括以下几个方面: 1.服务器的链接:包括主机,用户名,密码 2.数据库的选择:要操作哪个数据库 3.字符集的设置:设置什么样的编码 4.查询 ...
- Eclipse使用Maven建立SSM多模块的项目
需求说明: 1.Eclipse利用Maven创建项目 2.通过Maven构建不同模块,对单个项目进行拆分(controller.service.dao层). 3.通过Maven替代原始的jar包导入( ...
- 计算机网络实验报告建立校园网,计算机网络实验报告
设计性实验报告 一.实验目的 通过对网络设备的连通和对拓扑的分析,加深对常见典型局域网拓扑的理解:通过路由建立起网络之间的连接,熟悉交换机.路由器的基本操作命令,了解网络路由的设计与配置. 二.背景描 ...
最新文章
- Ubuntu16.04 永久修改主机名 hostname
- 【Live555】live555源码详解(五):MediaSource、MediaSink、MediaSession、MediaSubsession
- 行如风 Angular 初识3
- “蓝桥杯”软件大赛入门训练4道题
- 照片处理软件(iSee图片专家) 3.930 中文免费版
- 杂货 - 收藏集 - 掘金
- 气候变化与 计算机网络,北京理工大学:气候变化综合评估模式研究获立项
- wbe下载Excel文件Response响应头格式
- 上班摸鱼的模拟经营文字游戏(管理后台页面,老板都看不出来)
- 学电子信息工程,出路在哪里?
- 计算机考研380分能上什么学校,考研总分500考380难吗 能上什么学校
- 当爬虫被拒绝时(Access Denied)
- 微软发布了免费的文件恢复工具!
- python数据模型和算法_万字案例 | 用Python建立客户流失预测模型(含源数据+代码)...
- 《谁还能说〈周易〉读不懂、没读懂?》系列论文(三):《周易》象数思维方式演绎中国传统文化(吉 华)...
- Java 集合深入理解(17):HashMap 在 JDK 1.8 后新增的红黑树结构
- ansys机械工程应用精华50例命令流
- Fatal: Failed to start mining: etherbase missing: etherbase must be explicitly specified
- 如何优雅的实现斗地主?
- 自己写一个代理绕过公司网络限制,听歌、看电影,实际上就是所有代理的原理,不仅仅是这些功能
热门文章
- BUUctf [GXYCTF2019]Ping Ping Ping
- NUST 2009-8
- php邮件群发系统日发5000,最新qq邮件群发日发10000封邮件
- 【论文分享】BERTifying the Hidden Markov Model for Multi-Source Weakly Supervised Named Entity Recognition
- 查看已删除好友聊天记录
- 【商业画布】魏朱画布
- 直角坐标积分化为极坐标积分_将直角坐标系下的二次积分转换成极坐标系下的二次积分...
- Eureka的InstanceInfoReplicator类(服务注册辅助工具)
- 《Python数据分析与挖掘实战》第8章——中医证型关联规则挖掘(Apriori关联)
- 在2021年为七夕Python程序与Docker牵线配对