知识管理系统Data Solution研发日记之五 网页下载,转换,导入
这个系列的文章已经写过四篇,如果你错过了之前的文章,可以通过下面的连接来找到他们
知识管理系统Data Solution研发日记之一 场景设计与需求列出
知识管理系统Data Solution研发日记之二 应用程序系列
知识管理系统Data Solution研发日记之三 文档解决方案
知识管理系统Data Solution研发日记之四 片段式数据解决方案
在这一篇中,专注于互联网的网页数据的下载,转换格式与导入到SQL Server数据库中。
先看Data Loader为网页下载提供的四个应用程序
UserId Blog 依照注册的用户Id来获取它的所有文章,随笔
Url Blog 依照提供的Url网址连接,下载连接中的文档和知识
Text Blog 依照一段html格式的文本,找出其中的连接,再下载它们到本地
Default Blog 依照提供的默认首页,找到需要的文章并下载
Site Rebuild 根据提供的网站的不同,下载网页,转换成数据库中的格式,并导入到数据库中
Site Rebuild提供下载,转换和导入一条龙的服务,区别于前四个应用程序,它们只负责下载。
Site Rebuild在这里并没有做到像搜索引擎的爬虫一样,在广阔的互联网网页中搜索,爬行。因为我需要的是有用的,对现在的学习和工作有益处的文档,资料和数据,而不是所有的数据都需要。所以,看到上面的只有五个Tab来寻找网页资源,它也是公认的优秀的资源来源。可能会遗漏一些重要的网站,网页,欢迎你的补充。另外,这几个网站也只是专注于IT编程行业,而没有涉及到汽车行业。最近一直想找一些汽车配件行业的知识,苦于没有基础,不知道从哪里入手。所谓的干一行,爱一行,还真是这样,想干IT这一行,又爱其它的行业,没有专业知识,没有基础,就好比瞎子一样,对有用的,无用的资料都视而不见,年纪大了之后,还想从零起步,真有些难。
互联网是丰富的知识的来源,借助于《知识管理系统Data Solution研发日记之三 文档解决方案》,可以将本机电脑中所有的文档资源转化为SQL Server数据库文档,依据这一篇文章中提到的知识点和应用程序,则可以抓取丰富的互联网数据资料,构建一个庞大的知识管理的数据库系统。
下载网页是我们经常的行为,遇到好的资料,要么CTRL+C拷贝到WORD中,要么直接另存为htm/mht文件,这两种行为均会导致这些资料分散在硬盘的各个角落中,除非你有很好的耐心去整理成DOC/DOCX,或是用专业的笔记软件,如Microsoft One Note或是Ever Note整理,否则随着时间的积累,硬盘中会有大量的想删除又不能删,想看又没有耐心的文件,常常是这样的一种情形,以我搜集资料的体会,我经常这样做。
下载为本地的mht文件,它的关键代码片段如下面所示
CDO.Message message = new CDO.MessageClass(); message.MimeFormatted = true; ADODB.Stream stream; try { message.CreateMHTMLBody(str, CDO.CdoMHTMLFlags.cdoSuppressNone, "", ""); stream = message.GetStream(); } //"Exception 0xc0000005 was generated at address 0x0000000076FE1C30\r\n" catch { } stream.SaveToFile(fileName, ADODB.SaveOptionsEnum.adSaveCreateOverWrite); stream.Close();
你可以用关键字CDO去搜索,这会找到很多保存网页为本机mht文件的方法。
网页的下载的格式,以mht格式最优,它可以在一个单一文件中,保存所有的图片和文本,避免htm文件把图片和css放在单一的文件夹中。mht格式同时也是邮件的标准格式,你可以将mht的扩展名改成eml,用Outlook Express或是Live Mail打开,它就是一封邮件。重点的问题就转化到了,如何读取mht格式的文件,转化成RTF格式。这方面的例子,在CodeProject中有比较多的文章介绍,请在该网站中搜索。
最后一步骤就是读取和编辑保存到数据库中的网页数据,在Document Browser中找到需要的文件,双击打开只读程序
如果对它的内容不满意,可以用Editor打开这个文件,进行编辑
这里还缺乏一个基于Web的文档浏览系统,可以通过ASP.NET Web开发技术,直接浏览数据库服务器中的文档。因为Web的htm标签与RTF格式的标签会有很大的出入和不同,暂时还未有实现一个可支持在线编辑的Web文档系统。
对mht格式的文件,本来是用IE网页可以直接浏览的,但是,文件的内容越多,打开的速度实在太慢,甚至会造成假死的状态,原来计划写一个MhtReader,专门读取和显示mht格式文件,用Web Browser控件打开mht文件,代码是这样
public partial class MhtReader : Form { public MhtReader(string fileName) { InitializeComponent(); _fileName = fileName; } private string _fileName; private void MhtReader_Load(object sender, EventArgs e) { if (!string.IsNullOrEmpty(_fileName)) { webBrowser1.Navigate(_fileName); this.Text =Path.GetFileNameWithoutExtension(_fileName); } } }
因为效率不好,这个计划也放弃了。用IE打开mht文件的速度实在是慢,有时候还要不停的设置允许脚本代码的运行,这在浏览大量文档时,是不可接受的。所以,对mht格式也没有放弃在后台转换成RTF格式。
xps的文档格式,在系统中大量存在,在WORD或是字处理软件的打印选项中,把打印机设置成Microsoft XPS Document Writer,即可把当前的文档转换成xps格式的文档。这种格式在微软的文档中经常看到。
在保存网页时,如果它的图片是引用网络资源的图片,在没有互联网连接的情况下,这些图片是无法显示的。这种情况经常发生在碰到一些好的资料,赶紧CTRL+C放到WORD中,或者另存为htm/mht文件,然后拷贝到U盘中,等换一台电脑,因为没有网络连接,打开一看,图片都无法显示。这种情况下,我的解决办法就是用Adobe PDF把网页打印成PDF格式的文档,图片和文字都保存在PDF文件中,或是用Microsoft XPS Document Writer打印成XPS的文件,这两种情况,都会把图片保存到指定的文件。至于PDF文件转换成DOC/DOCX格式文件,应该不是问题。互联网上有大量的PDF to DOC/DOCX格式的工具,free免费,green绿色,这两者的优点都包括的工具实在是太多了。如上图所示,我推荐的是工具是Adobe Acrobat Professional和Nitro PDF Professional。Adobe SDK支持以编程的方式,调用Adobe Acrobat 的所有功能,包括文档格式转换,PDF数据提取,Nitro PDF提供了优秀的PDF编辑功能,值得推荐。听说Adobe SDK的License费用非常的expensive,PDF Focus.NET有优秀的,专门用于.NET操作的API,可惜连个Trial版本也找不到,找到的版本,要么只能转换文档的前几页,要么加上水印,我的这个Data Solution只好另找途径,想要在这两家公司的产品上找突破点,真有些不可能。
生活在天朝,最大的好处是知识是无价的,没有价值的,不需要付出成本,就可以得到很多很多的知识,技术,生产力和工具,如果能利用到这些优势,你可以创造的生产力价值也是巨大的。当然,你也要为此付出代价,一个ERP软件买3万,客户还要说,这么贵呀,我去盗版碟中找出一个系统来,才不到五元的成本。还有的干脆在网上下载,就耗费一些电费。是的,上帝是公平的。