使用C#采集Shibor数据到Excel
对Shibor的变化一直以来比较关注,正好最近学习了对html数据处理的一些知识,就打算拿来采集一些我需要的Shibor数据。
使用到的库
HttpAgilityPack 一个非常不错的html解析工具库
NPOI 一个非常好的office文档生成和读取的库。
整个过程如下:
分析网页内容结构
Shibor的网站开发的比较早了,所以网页布局采用的大量的Table和iFrame,利用浏览器的F12工具,可以很方便的分析出来需要数据的位置。

从上面截图可以看出,我需要的数据区域是一个iFrame加载出来的,所以其实这个src的内容就是我要的,即/shibor/Shibor.do?date=2018-04-25,结合域名知道实际请求url是http://www.shibor.org/shibor/Shibor.do?date=2018-04-25 参数是日期,格式是yyyy-MM-dd,也就是说只需要构造这个参数,就可以得到不同日期的shibor数据了。
将这个新url输入到浏览器里查看

确实是我需要的内容。
下载和解析网页内容
下载该网页的内容就简单了,可以使用很多种方法,我这里直接使用了Http Agility Pack里的HttpWeb类里的Load方法。
涉及到的页面分析这里不罗嗦了,并不难理解,直接贴代码了。
public List<ShiborModel> Download(DateTime shiborDate)
{
string new_url = $"{url}{shiborDate.ToString("yyyy-MM-dd")}";
List<ShiborModel> shibors = new List<ShiborModel>();
try
{
var web = new HtmlWeb();
var doc = web.Load(new_url);
var results = doc.DocumentNode.SelectSingleNode("//table[@class='shiborquxian']");
foreach (var item in results.Descendants("tr"))
{
var tds = item.Descendants("td").ToList();
var name = tds[1].InnerText;
var shibor = tds[2].InnerText;
var bp = tds[4].InnerText;
shibors.Add(new ShiborModel
{
Name = name,
Shibor = double.Parse(shibor),
BP = double.Parse(bp)
});
}
}
catch (Exception)
{
Console.WriteLine($"处理{shiborDate.ToString("yyyyMMdd")}");
}
return shibors;
}
处理解析得到的数据
上面方法返回的是需要数据的集合,而我需要将这些数据输出为excel格式的文件,而.net输出excel的库也有很多,我使用的是国人自己基于openxmlsdk开发的NPOI库,很优秀的库,同样贴出处理的代码。
关于NPOI的使用,可以参考其他人写的文章。
public void BatchDownLoad(DateTime startDate, DateTime endDate)
{
try
{
XSSFWorkbook workbook2007 = new XSSFWorkbook();
workbook2007.CreateSheet("Shibor");
if (File.Exists(excel))
{
File.Delete(excel);
}
FileStream fs = new FileStream(excel, FileMode.CreateNew);
XSSFSheet sheet = (XSSFSheet)workbook2007.GetSheet("Shibor");
XSSFRow first_row = (XSSFRow)sheet.CreateRow(0);
((XSSFCell)first_row.CreateCell(0)).SetCellValue("日期");
((XSSFCell)first_row.CreateCell(1)).SetCellValue("O/N");
((XSSFCell)first_row.CreateCell(2)).SetCellValue("1W");
((XSSFCell)first_row.CreateCell(3)).SetCellValue("2W");
((XSSFCell)first_row.CreateCell(4)).SetCellValue("1M");
((XSSFCell)first_row.CreateCell(5)).SetCellValue("3M");
((XSSFCell)first_row.CreateCell(6)).SetCellValue("6M");
((XSSFCell)first_row.CreateCell(7)).SetCellValue("9M");
((XSSFCell)first_row.CreateCell(8)).SetCellValue("1Y");
var dataformat = workbook2007.CreateDataFormat();
var style = workbook2007.CreateCellStyle();
style.DataFormat = dataformat.GetFormat("yyyy-MM-dd");
int rowNumber = 1;
DateTime currentDate = startDate;
while (currentDate < endDate)
{
var shibors = Download(currentDate);
if (shibors.Count == 0)
continue;
XSSFRow temp_row = (XSSFRow)sheet.CreateRow(rowNumber);
((XSSFCell)temp_row.CreateCell(0)).SetCellValue(currentDate.Date);
temp_row.GetCell(0).CellStyle = style;
((XSSFCell)temp_row.CreateCell(1)).SetCellValue(shibors[0].Shibor);
((XSSFCell)temp_row.CreateCell(2)).SetCellValue(shibors[1].Shibor);
((XSSFCell)temp_row.CreateCell(3)).SetCellValue(shibors[2].Shibor);
((XSSFCell)temp_row.CreateCell(4)).SetCellValue(shibors[3].Shibor);
((XSSFCell)temp_row.CreateCell(5)).SetCellValue(shibors[4].Shibor);
((XSSFCell)temp_row.CreateCell(6)).SetCellValue(shibors[5].Shibor);
((XSSFCell)temp_row.CreateCell(7)).SetCellValue(shibors[6].Shibor);
((XSSFCell)temp_row.CreateCell(8)).SetCellValue(shibors[7].Shibor);
Console.WriteLine($"{currentDate.Date}处理OK");
currentDate = currentDate.AddDays(1);
rowNumber++;
}
workbook2007.Write(fs);
fs.Close();
workbook2007.Close();
}
catch (Exception)
{
throw;
}
}
得到结果

图形不是程序生成的,是我用excel的图表功能附加上去的。
因为不是正式项目,所以没有考虑太多开发的规范性,代码只是要求能运行出结果即可。
使用C#采集Shibor数据到Excel的更多相关文章
- C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...
- 使用POI导出百万级数据到excel的解决方案
1.HSSFWorkbook 和SXSSFWorkbook区别 HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls,一张表最大支持65536行数据,256列 ...
- ASP.NET MVC5下载数据到Excel文件
项目中的一个功能是将数据导入到Excel文件中,这里使用NPOI操作Excel,代码如下: public class Excel : IDataTransfer { public Stream Exp ...
- 1.ASP.NET MVC使用EPPlus,导出数据到Excel中
好久没写博客了,今天特地来更新一下,今天我们要学习的是如何导出数据到Excel文件中,这里我使用的是免费开源的Epplus组件. 源代码下载:https://github.com/caofangshe ...
- 导出数据到Excel --使用ExcelReport有感
先看图,这是几个月前用NPOI写的导出数据到Excel,用了上百行代码,而且难控制,导出来也比较难看 excel打开的效果 下面是我用ExcelReport类库导出到Excel的操作 1.首先引用Ex ...
- 将Oracle数据库中的数据写入Excel
将Oracle数据库中的数据写入Excel 1.准备工作 Oracle数据库"TBYZB_FIELD_PRESSURE"表中数据如图: Excel模板(201512.xls): 2 ...
- [Asp.net]常见数据导入Excel,Excel数据导入数据库解决方案,总有一款适合你!
引言 项目中常用到将数据导入Excel,将Excel中的数据导入数据库的功能,曾经也查找过相关的内容,将曾经用过的方案总结一下. 方案一 NPOI NPOI 是 POI 项目的 .NET 版本.POI ...
- 使用Open xml 操作Excel系列之二--从data table导出数据到Excel
由于Excel中提供了透视表PivotTable,许多项目都使用它来作为数据分析报表. 在有些情况下,我们需要在Excel中设计好模板,包括数据源表,透视表等, 当数据导入到数据源表时,自动更新透视表 ...
- Dynamics CRM导出数据到Excel
原创地址:http://www.cnblogs.com/jfzhu/p/4276212.html 转载请注明出处 Pivot Table是微软BI的一个重要工具,所以这里讲一下Dynamics CRM ...
随机推荐
- Spring-IOC BeanFactory运行时动态注册bean
在spring运行时,动态的添加bean,dapeng框架在解析xml的字段时,使用到了动态注册,注册了一个实现了FactoryBean类! 定义一个没有被Spring管理的Controller pu ...
- CentOS 7.4 yum安装LAMP环境
配置防火墙,开启80.3306端口.CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙. #停止firewall服务 systemctl stop firewa ...
- golang xorm应用
github.com/go-xorm/xorm xorm库 http://www.xorm.io/docs/ 手册 xorm是一个简单而强大的Go语言ORM库. 通过它可以使数据库操作非常简便.xo ...
- windows 下nginx配置php支持
修改nginx配置 location ~ \.php$ { root D:/Learn/php/test/; fastcgi_pass ; fastcgi_index index.php; fastc ...
- jenkins+pytest+ allure运行多个py文件测试用例
jenkins的pytest运行多个py文件,导出allure报告方法,只需改下job的配置中的构建即可(pytest会运行指定文件下的所有test开头的py文件),如下: ...
- Jenkins+github的一次定时构建示例
首先说明,我的电脑环境是windows,所以以下的示例是基于windows10 X64. 一.新建任务,填写名称,选择类型,点击左下角的[确定] 二.配置 1.General 2.源码管理 之前在gi ...
- nRF5282 资料链接帖子
官方硬件设计参考
- mac 下安装php7.1 memcache扩展
1.下载memcache源代码文件 https://github.com/websupport-sk/pecl-memcache/archive/php7.zip 文件夹名为:pecl-memcach ...
- 20155213 《网络攻防》 Exp1 PC平台逆向破解
20155213 <网络攻防> Exp1 PC平台逆向破解(5)M 实践内容 通过对实践对象--pwn20155213的linux可执行文件的修改或输入,完成以下三块: 手工修改可执行文件 ...
- 20145207《Java程序设计》实验五(网络编程与安全)实验报告
<Java 程序设计>实验五(网络编程与安全)实验报告 目录 改变 网络编程与安全实验要求 实验成果 课后思考 改变 修改了之前仅仅是贴了图片,连代码都没粘的状态.不过这篇博客我只能做到写 ...