使用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#建立奥运奖牌榜相关推荐

  1. mysql建立联合索引,mysql建立唯一键,mysql如何解决重复记录联合索引

    在项目中,常常要用到联合唯一   在一些配置表中,一些列的组合成为一条记录.   比如,在游戏中,游戏的分区和用户id会形成一条记录.(比如,一个qq用户可以在艾欧尼亚.德玛西亚创建两个账号) 添加联 ...

  2. Go 学习笔记(59)— Go 第三方库之 etcd/clientv3 封装为方法使用(建立连接、设置key-value、获取key-value、获取带前缀的key-value)

    1. 示例 1 package main import ("context""fmt""go.etcd.io/etcd/clientv3"& ...

  3. 在idea使用maven工程建立web项目时,启动Tomcat访问不到项目首页。

    在idea使用maven工程建立web项目时,启动Tomcat访问不到项目首页,输入URL:http://localhost:8080/时一片空白也不报错 ,按下面步骤检查: 1.看下这几个地方是否配 ...

  4. 推理芯片的性能建立在优化的存储子系统设计上

    推理芯片的性能建立在优化的存储子系统设计上 Inference chip performance builds on optimized memory subsystem design 好的推断芯片可 ...

  5. 接触追踪解决方案建立在UWB而不是蓝牙上

    接触追踪解决方案建立在UWB而不是蓝牙上 Contact tracing solution builds on UWB rather than Bluetooth 几个月前,当社会距离明显成为对抗CO ...

  6. Windows窗口的建立

    Windows窗口的建立 预备知识 DC CreateCompatibleDC() CreateDIBSection() SelectObject() BitBlt() CODE 设备上下文 (简称为 ...

  7. 建立一个php 基础类

    在些PHP文件的时候,一般首先都是要先写一下基础类: 主要包括以下几个方面: 1.服务器的链接:包括主机,用户名,密码 2.数据库的选择:要操作哪个数据库 3.字符集的设置:设置什么样的编码 4.查询 ...

  8. Eclipse使用Maven建立SSM多模块的项目

    需求说明: 1.Eclipse利用Maven创建项目 2.通过Maven构建不同模块,对单个项目进行拆分(controller.service.dao层). 3.通过Maven替代原始的jar包导入( ...

  9. 计算机网络实验报告建立校园网,计算机网络实验报告

    设计性实验报告 一.实验目的 通过对网络设备的连通和对拓扑的分析,加深对常见典型局域网拓扑的理解:通过路由建立起网络之间的连接,熟悉交换机.路由器的基本操作命令,了解网络路由的设计与配置. 二.背景描 ...

最新文章

  1. Ubuntu16.04 永久修改主机名 hostname
  2. 【Live555】live555源码详解(五):MediaSource、MediaSink、MediaSession、MediaSubsession
  3. 行如风 Angular 初识3
  4. “蓝桥杯”软件大赛入门训练4道题
  5. 照片处理软件(iSee图片专家) 3.930 中文免费版
  6. 杂货 - 收藏集 - 掘金
  7. 气候变化与 计算机网络,北京理工大学:气候变化综合评估模式研究获立项
  8. wbe下载Excel文件Response响应头格式
  9. 上班摸鱼的模拟经营文字游戏(管理后台页面,老板都看不出来)
  10. 学电子信息工程,出路在哪里?
  11. 计算机考研380分能上什么学校,考研总分500考380难吗 能上什么学校
  12. 当爬虫被拒绝时(Access Denied)
  13. 微软发布了免费的文件恢复工具!
  14. python数据模型和算法_万字案例 | 用Python建立客户流失预测模型(含源数据+代码)...
  15. 《谁还能说〈周易〉读不懂、没读懂?》系列论文(三):《周易》象数思维方式演绎中国传统文化(吉 华)...
  16. Java 集合深入理解(17):HashMap 在 JDK 1.8 后新增的红黑树结构
  17. ansys机械工程应用精华50例命令流
  18. Fatal: Failed to start mining: etherbase missing: etherbase must be explicitly specified
  19. 如何优雅的实现斗地主?
  20. 自己写一个代理绕过公司网络限制,听歌、看电影,实际上就是所有代理的原理,不仅仅是这些功能

热门文章

  1. BUUctf [GXYCTF2019]Ping Ping Ping
  2. NUST 2009-8
  3. php邮件群发系统日发5000,最新qq邮件群发日发10000封邮件
  4. 【论文分享】BERTifying the Hidden Markov Model for Multi-Source Weakly Supervised Named Entity Recognition
  5. 查看已删除好友聊天记录
  6. 【商业画布】魏朱画布
  7. 直角坐标积分化为极坐标积分_将直角坐标系下的二次积分转换成极坐标系下的二次积分...
  8. Eureka的InstanceInfoReplicator类(服务注册辅助工具)
  9. 《Python数据分析与挖掘实战》第8章——中医证型关联规则挖掘(Apriori关联)
  10. 在2021年为七夕Python程序与Docker牵线配对