最新项目需要抓取人民币汇率中间价的数据,所以就写了个简单的爬虫抓取数据。抓取的网站为:http://www.safe.gov.cn/wps/portal/sy/tjsj_hlzjj_inquire

#region 执行数据抓取(人民币汇率中间价)
/// <summary>
/// 执行数据抓取(人民币汇率中间价)
/// </summary>
public void CaptureData()
{
isExecuting = true;
StringBuilder msg = new StringBuilder();
msg.AppendFormat("执行时间:{0}\r\n", DateTime.Now);
msg.Append("开始抓取人民币汇率中间价...\r\n\r\n");
SetLogging(msg.ToString()); var db = new dbContext();
var trans = db.Database.BeginTransaction();
string title = "";
DateTime dt = DateTime.Now;
if (executeType == "true")
{
title += dt.ToString("yyyy-MM-dd") + "的数据抓取";
}
else
{
title += "时间范围为:开始时间为" + startTime + ",结束时间为" + endTime + "的数据抓取";
} try
{
string url = "";
string basePath = "http://www.safe.gov.cn/AppStructured/view/project_RMBQuery.action";
if(executeType == "true")
{
var date = DateTime.Now.ToString("yyyy-MM-dd");
url = basePath + "?projectBean.startDate=" + date + "&projectBean.endDate=" + date + "&queryYN=true";
}
else
{
url = basePath + "?projectBean.startDate=" + startTime + "&projectBean.endDate=" + endTime + "&queryYN=true";
} //string url = "http://www.safe.gov.cn/AppStructured/view/project_RMBQuery.action?projectBean.startDate=2017-03-15&projectBean.endDate=2017-03-15&queryYN=true";
//发送请求
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "GET";
request.ProtocolVersion = HttpVersion.Version11;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36";
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
request.Timeout = ;
request.Headers.Add("Accept-Encoding", "gzip, deflate");
request.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8");
request.Headers.Add("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3");
request.CookieContainer = new CookieContainer();
//接收请求
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
string resultStr = ""; //返回字符串,若翻译失败则返回空字符串
using (StreamReader reader = new StreamReader(stream, Encoding.GetEncoding("utf-8")))
{
//开始解释结果
string result = reader.ReadToEnd();
if(!string.IsNullOrEmpty(result))
{
result = result.Replace("\n",""); //过滤\n转换为空
result = result.Replace("\r", ""); //过滤\r转换为空
result = result.Replace("\t", ""); //过滤\t转换为空
result = result.Replace("\\", ""); //过滤\转换为空
result = Regex.Replace(result, @"<!--(?s).*?-->", "", RegexOptions.IgnoreCase); //过滤注释
result = result.Replace("&nbsp;", ""); //过滤nbsp标签
string tableHtml = Regex.Match(result, "<table class=\"list\" id=\"InfoTable\".*>.*</table>").ToString();
MatchCollection trHtmls = Regex.Matches(tableHtml, "<tr class=\"first\".*?>(.*?)</tr>");
foreach (Match tr in trHtmls)
{
#region 插入一条信息
Regex reg2 = new Regex("<td.*?>(.*?)</td>");
MatchCollection mc2 = reg2.Matches(tr.Value);
List<string> dataList = new List<string>(); Match[] marr = mc2.OfType<Match>().ToArray();
for(int i=;i<marr.Length;i++)
{
var value = marr[i].Groups[].Value;
dataList.Add(value);
} var dateTime = Convert.ToDateTime(dataList[]);
var item = db.RMB_EXCHANGERATE.Where(p => p.TIME == dateTime).FirstOrDefault();
if(item == null)
{
RMB_EXCHANGERATE obj = new RMB_EXCHANGERATE();
obj.ID = Guid.NewGuid().ToString();
obj.TIME = Convert.ToDateTime(dataList[]);
obj.USD = Convert.ToDecimal(dataList[]);
obj.EUR = Convert.ToDecimal(dataList[]);
obj.JPY = Convert.ToDecimal(dataList[]);
obj.HKD = Convert.ToDecimal(dataList[]);
obj.GBP = Convert.ToDecimal(dataList[]);
obj.MYR = Convert.ToDecimal(dataList[]);
obj.SUR = Convert.ToDecimal(dataList[]);
obj.ZAR = Convert.ToDecimal(dataList[]);
obj.KRW = Convert.ToDecimal(dataList[]);
obj.AED = Convert.ToDecimal(dataList[]);
obj.SR = Convert.ToDecimal(dataList[]);
obj.HUF = Convert.ToDecimal(dataList[]);
obj.PLN = Convert.ToDecimal(dataList[]);
obj.DKK = Convert.ToDecimal(dataList[]);
obj.SEK = Convert.ToDecimal(dataList[]);
obj.NOK = Convert.ToDecimal(dataList[]);
obj.ITL = Convert.ToDecimal(dataList[]);
obj.PHP = Convert.ToDecimal(dataList[]);
obj.AUD = Convert.ToDecimal(dataList[]);
obj.CAD = Convert.ToDecimal(dataList[]);
obj.NZD = Convert.ToDecimal(dataList[]);
obj.SGD = Convert.ToDecimal(dataList[]);
obj.CHF = Convert.ToDecimal(dataList[]);
obj.CREATETIME = DateTime.Now;
db.RMB_EXCHANGERATE.Add(obj);
}
#endregion
} db.SaveChanges();
trans.Commit(); StringBuilder msg2 = new StringBuilder();
msg2.AppendFormat("执行时间:{0}\r\n", DateTime.Now);
msg2.AppendFormat("{0}成功\r\n\r\n",title);
SetLogging(msg2.ToString());
}
else
{
StringBuilder msg2 = new StringBuilder();
msg2.AppendFormat("执行时间:{0}\r\n", DateTime.Now);
msg2.AppendFormat("{0}为空\r\n\r\n\r\n",title);
SetLogging(msg2.ToString());
}
} isExecuting = false; //无论执行成功还是失败,完成后都要恢复状态
}
catch (Exception ex)
{
trans.Rollback();
var message = logTemplate2(ex, title+"失败");
SetLogging(message);
if (ex.Message == "请求超时")
{
//循环抓取
CaptureData();
} isExecuting = false; //无论执行成功还是失败,完成后都要恢复状态
}
}
#endregion

.net网站数据抓取的更多相关文章

  1. 倔强的网站数据抓取,关键时刻还需Webbrowser显身手

    由于最近台风挺多,公司网站上需要挂上台风预报信息,就整了个抓取台风数据(至于抓数据的概念和实践手册我以前写的一篇博客里面有介绍:分享一套抓数据小程序,客户资料.实时新闻.股票数据…随心抓)的服务,做调 ...

  2. WebScraper for Mac(网站数据抓取软件) 4.10.2

    WebScraper Mac版是一款Mac平台上通过使用将数据导出为JSON或CSV的简约应用程序,WebScraper Mac版可以快速提取与某个网页(包括文本内容)相关的信息.WebScraper ...

  3. java编写网站数据抓取

    来公司已经俩月了,每天加班平均工时11个小时的我又想起了老东家温馨舒适安逸的生活.已经有好久没时间读博客写博客了,我觉得我退步了,嗯嗯,我很不开心 今天记录下抓数据的一些东西吧. 数据抓取现在是很普遍 ...

  4. 吴裕雄--天生自然python学习笔记:WEB数据抓取与分析

    Web 数据抓取技术具有非常巨大的应用需求及价值, 用 Python 在网页上收集数据,不仅抓取数据的操作简单, 而且其数据分析功能也十分强大. 通过 Python 的时lib 组件中的 urlpar ...

  5. C# 从需要登录的网站上抓取数据

    [转] C# 从需要登录的网站上抓取数据 背景:昨天一个学金融的同学让我帮她从一个网站上抓取数据,然后导出到excel,粗略看了下有1000+条记录,人工统计的话确实不可能.虽说不会,但作为一个学计算 ...

  6. Phantomjs+Nodejs+Mysql数据抓取(1.数据抓取)

    概要: 这篇博文主要讲一下如何使用Phantomjs进行数据抓取,这里面抓的网站是太平洋电脑网估价的内容.主要是对电脑笔记本以及他们的属性进行抓取,然后在使用nodejs进行下载图片和插入数据库操作. ...

  7. R语言XML包的数据抓取

    htmlParse 函数 htmlParse加抓HTML页面的函数. url1<-"http://www.caixin.com/"url<-htmlParse(url1 ...

  8. 数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置

     数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby     数据抓取是一门艺术,和其他软件不同,世界上 ...

  9. python爬虫数据抓取方法汇总

    概要:利用python进行web数据抓取方法和实现. 1.python进行网页数据抓取有两种方式:一种是直接依据url链接来拼接使用get方法得到内容,一种是构建post请求改变对应参数来获得web返 ...

随机推荐

  1. js图片库 案例

    事件处理函数:事件处理函数的作用是,在特定事件发生时调用特定的JavaScript代码.本例中想要在用户点击某个链接的时候触发一个动作,所以需要使用onclick事件处理函数. 添加事件处理函数的语法 ...

  2. Error:linker command failed with exit code 1 (use -v to see invocation) - iOS

    今天在操作 CoreData 时,创建完 Create NSManagedObject Subclass...  后,工程中会自动生成四个文件,如下图所示:   此时此刻便以工程,激动人心的时刻来临了 ...

  3. 【学时总结】◆学时·VIII◆ 树形DP

    ◆学时·VIII◆ 树形DP DP像猴子一样爬上了树……QwQ ◇ 算法概述 基于树的模型,由于树上没有环,满足DP的无后效性,可以充分发挥其强大统计以及计算答案的能力. 一般来说树形DP的状态定义有 ...

  4. ssm整合-错误2

    1 警告: No mapping found for HTTP request with URI [/management] in DispatcherServlet with name 'dispa ...

  5. 一件安装lnmp

    wget -c http://soft.vpser.net/lnmp/lnmp1.2-full.tar.gz && tar zxf lnmp1.2-full.tar.gz && ...

  6. python——直方图均衡化

    from PIL import Image from pylab import * from numpy import * def histeq(im,nbr_bins = 256): "& ...

  7. sql查询平均下单时间

    SQL查询订单平均审核时长 今天在写一个sql,需求是算一个订单在执行状态中的各个节点的时长 比如在订单中,状态0为开始接单,状态3为已经审核,那么现在需要计算每个客服的平均审核时长 像图中所示:这个 ...

  8. 2、spring boot 配置文件

    配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.properties •application.yml 配置文件的作用:修改SpringBoot自 ...

  9. git重新下载项目

    file-new-project from version control - git 修改网址为需要的网址

  10. 笔记-python-lib-requests常用类/方法/属性

    笔记-python-lib-requests常用类/方法/属性 1.      requests模块常用类/方法/属性 在使用中发现对requests模块不够熟悉,写了几个案例后重新整理了一下文档,罗 ...