.net网站数据抓取
最新项目需要抓取人民币汇率中间价的数据,所以就写了个简单的爬虫抓取数据。抓取的网站为: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标签
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网站数据抓取的更多相关文章
- 倔强的网站数据抓取,关键时刻还需Webbrowser显身手
由于最近台风挺多,公司网站上需要挂上台风预报信息,就整了个抓取台风数据(至于抓数据的概念和实践手册我以前写的一篇博客里面有介绍:分享一套抓数据小程序,客户资料.实时新闻.股票数据…随心抓)的服务,做调 ...
- WebScraper for Mac(网站数据抓取软件) 4.10.2
WebScraper Mac版是一款Mac平台上通过使用将数据导出为JSON或CSV的简约应用程序,WebScraper Mac版可以快速提取与某个网页(包括文本内容)相关的信息.WebScraper ...
- java编写网站数据抓取
来公司已经俩月了,每天加班平均工时11个小时的我又想起了老东家温馨舒适安逸的生活.已经有好久没时间读博客写博客了,我觉得我退步了,嗯嗯,我很不开心 今天记录下抓数据的一些东西吧. 数据抓取现在是很普遍 ...
- 吴裕雄--天生自然python学习笔记:WEB数据抓取与分析
Web 数据抓取技术具有非常巨大的应用需求及价值, 用 Python 在网页上收集数据,不仅抓取数据的操作简单, 而且其数据分析功能也十分强大. 通过 Python 的时lib 组件中的 urlpar ...
- C# 从需要登录的网站上抓取数据
[转] C# 从需要登录的网站上抓取数据 背景:昨天一个学金融的同学让我帮她从一个网站上抓取数据,然后导出到excel,粗略看了下有1000+条记录,人工统计的话确实不可能.虽说不会,但作为一个学计算 ...
- Phantomjs+Nodejs+Mysql数据抓取(1.数据抓取)
概要: 这篇博文主要讲一下如何使用Phantomjs进行数据抓取,这里面抓的网站是太平洋电脑网估价的内容.主要是对电脑笔记本以及他们的属性进行抓取,然后在使用nodejs进行下载图片和插入数据库操作. ...
- R语言XML包的数据抓取
htmlParse 函数 htmlParse加抓HTML页面的函数. url1<-"http://www.caixin.com/"url<-htmlParse(url1 ...
- 数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置
数据抓取的艺术(一):Selenium+Phantomjs数据抓取环境配置 2013-05-15 15:08:14 分类: Python/Ruby 数据抓取是一门艺术,和其他软件不同,世界上 ...
- python爬虫数据抓取方法汇总
概要:利用python进行web数据抓取方法和实现. 1.python进行网页数据抓取有两种方式:一种是直接依据url链接来拼接使用get方法得到内容,一种是构建post请求改变对应参数来获得web返 ...
随机推荐
- ipython notebook的使用
刚开始使用python,用的是ipython notebook,感觉很好用. 写的程序主要是处理文件的,读写txt文件,生成xml文件,其中参考http://www.cnblogs.com/wangs ...
- MappingException:class com.zsn.crm.Model.user not found whie looking for property user id
之前好好地运行 什么东西都没动过 再次运行突然报异常*****MappingException:class com.zsn.crm.Model.user not found whie looking ...
- Servlet学习笔记06——什么是转发,路径,状态管理?
1.include指令 (1)作用: 告诉容器,在将jsp转换成Servlet时,将 某个文件的内容插入到该指令所在的位置. (2)语法: <%@ include file="&quo ...
- mysql 命令 小结
CREATE DATABASE IF NOT EXISTS yourdbname DEFAULT CHARSET utf8 COLLATE utf8_general_ci;创建中文数据库show gl ...
- 7-3 python操作excel
1.写excel 写入特定单元格数据 # .导入xlwt模块 # .新建一个excel # .添加一个sheet页 # .往指定的单元格中写入数据 # .保存excel import xlwt boo ...
- Shell学习——终端打印
1.echo1.1.默认情况下,echo在每次调用后会添加一个换行符1.2.待打印的内容,可以用单引号.双引号或者直接打印,不同的方式,有各自的限制1.2.1.使用不带引号的echo时,没法打印分好( ...
- IDEA工具配置weblogic
1.首先打开IDEA,点击Run-Edit Configurations… 2.配置weblogic页面 2.1点击“+”号,选WeblogicServer-local 2.2红框的是新添加的服务,起 ...
- python__系统 : socket_TCP补充,协程
TCP 三次握手: SYN --> SYN+ACK --> ACK 四次挥手: FIN --> ACK (FIN) --> ACK TCP十种状态: LISTEN ...
- PyQuery网页解析库
from pyquery import PyQuery as pq 字符串初始化: doc = pq(html) URL初始化:doc = pq(url = "···") 文件初始 ...
- NOIP PJ游记
Day -1 感觉自信满满,一等奖应该稳了,毕竟初一时我这么菜都拿了二等奖,然后就睡觉了... Day 1 在大巴上玩元气骑士可开心了,车上欢欢喜喜,到了考场,一眼看题,以为很简单. T1硬模拟... ...