网络采集软件核心技术剖析系列(6)---将任意博主的全部博文下载到SQLite数据库中并通过Webbrower显示(将之前的内容综合到一起)

一 本系列随笔目录及本节代码下载

开发环境:VS2008

本节源码位置:https://github.com/songboriceboy/GatherAllStoreInDB

源码下载办法:安装SVN客户端(本文最后提供下载地址),然后checkout以下的地址:https://github.com/songboriceboy/GatherAllStoreInDB

系列文章提纲拟定如下:

1.如何使用C#语言获取博客园某个博主的全部随笔链接及标题;
2.如何使用C#语言获得博文的内容;
3.使用C#语言如何将html网页转换成pdf(html2pdf)
4.如何使用C#语言下载博文中的全部图片到本地并可以离线浏览
5.如何使用C#语言合成多个单个的pdf文件到一个pdf中,并生成目录
6.网易博客的链接如何使用C#语言获取到,网易博客的特殊性;
7.微信公众号文章如何使用C#语言下载;
8.如何获取任意一篇文章的全部图文
9.如何使用C#语言去掉html中的全部标签获取纯文本(html2txt)
10.如何使用C#语言将多个html文件编译成chm(html2chm)
11.如何使用C#语言远程发布文章到新浪博客
12.如何使用C#语言开发静态站点生成器
13.如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面)
14.如何使用C#语言实现网页编辑器(Winform)

......

二 第六节主要内容简介(将任意博主的全部博文下载到SQLite数据库中并通过Webbrower显示)

将任意博主的全部博文下载到SQLite数据库中并通过Webbrower显示的解决方案,演示demo如下图所示:可执行文件下载

与上节的demo不同在于,上节我们得到的某个博主的全部博文被保存在DataTable(内存)中,程序关闭后,全部下载下来的博文全都没了,下次还需要重新下载,这样明显不好。

这次我们将下载的博文存在sqlite数据库中,每新增一个博主,程序会自动在执行文件所在的文件夹下的WebSiteDB子目录中创建一个以博主ID命名的.db文件,该数据库是sqlite数据库。

程序加载的时候会自动去执行文件所在的文件夹下的WebSiteDB子目录扫描,在ComboBox下拉中列出扫描到数据库名字,点击某一个下拉项,程序自动加载该数据库中的文章表中的全部数据到DataGridView显示,点击DataGridView的某一项,可以在下部的WebBrower中浏览网页。

三 基本原理

我们为某个博主的全部博文定义了一张数据库表,表结构如下:

   string m_strCreatTable = @"--1-2 层节点表(AU_LayerNode)
drop table if exists [AU_LayerNode];
CREATE TABLE AU_LayerNode(
    AU_LayerNodeID                 INT NOT NULL PRIMARY KEY,
    AU_ParentLayerNodeID        INT NOT NULL DEFAULT 0,
    AU_UrlAddress              VARCHAR(1000) NOT NULL DEFAULT ‘‘,
    AU_UrlTitle              NVARCHAR(1000) NOT NULL DEFAULT ‘‘,
    AU_UrlContent            NTEXT NOT NULL DEFAULT ‘‘,
    AU_UrlLayer                   INT NOT NULL DEFAULT 0,
    AU_IsVisit                   INT NOT NULL DEFAULT 0,
    AU_RemoveSameOffset1          INT NOT NULL DEFAULT 0,
    AU_RemoveSameOffset2          INT NOT NULL DEFAULT 0,
    AU_LastUpdateDate           DATETIME  NOT NULL DEFAULT ‘2012-01-01‘,

    AU_ReserveInt1            INT NOT NULL DEFAULT 0,
    AU_ReserveInt2            INT NOT NULL DEFAULT 0,
    AU_ReserveInt3            INT NOT NULL DEFAULT 0,
    AU_ReserveInt4            INT NOT NULL DEFAULT 0,
    AU_ReserveInt5            INT NOT NULL DEFAULT 0,
    AU_ReserveInt6            INT NOT NULL DEFAULT 0,
    AU_ReserveInt7            INT NOT NULL DEFAULT 0,
    AU_ReserveInt8            INT NOT NULL DEFAULT 0,

    AU_ReserveStr1              VARCHAR(1000) NOT NULL DEFAULT ‘‘,
    AU_ReserveStr2              VARCHAR(1000) NOT NULL DEFAULT ‘‘,
    AU_ReserveNStr1              NVARCHAR(1000) NOT NULL DEFAULT ‘‘,
    AU_ReserveNStr2              NVARCHAR(1000) NOT NULL DEFAULT ‘‘,

    AU_ReserveTEXT1              TEXT NOT NULL DEFAULT ‘‘,
    AU_ReserveTEXT2              TEXT NOT NULL DEFAULT ‘‘,
    AU_ReserveTEXT3              TEXT NOT NULL DEFAULT ‘‘,
    AU_ReserveNTEXT1        NTEXT NOT NULL DEFAULT ‘‘,
    AU_ReserveNTEXT2        NTEXT NOT NULL DEFAULT ‘‘,
    AU_ReserveNTEXT3        NTEXT NOT NULL DEFAULT ‘‘,

    AU_ReserveDateTime1           DATETIME  NOT NULL DEFAULT ‘2012-01-01‘,
    AU_ReserveDateTime2           DATETIME  NOT NULL DEFAULT ‘2012-01-01‘,
    AU_ReserveDateTime3           DATETIME  NOT NULL DEFAULT ‘2012-01-01‘,
    AU_ReserveDateTime4           DATETIME  NOT NULL DEFAULT ‘2012-01-01‘,

    AU_ReserveDecmial1        DECIMAL NOT NULL DEFAULT 0,
    AU_ReserveDecmial2        DECIMAL NOT NULL DEFAULT 0
);

";

其中最重要的是AU_UrlAddress,AU_UrlTitle,AU_UrlContent这3个字段,分别表示博文链接地址,博文标题,博文正文内容。

接下来,对比上节内容,我们在新增博主下载的功能函数中增加了以下几行代码:

private Cls_SqliteMng m_sqliteMng = new Cls_SqliteMng();string m_connStr1 = @"Data Source=" + Application.StartupPath + @"\WebSiteDB\";
string m_connStr2 = @";Initial Catalog=sqlite;Integrated Security=True;Max Pool Size=10";

private string m_strInsertTaskInitData = @"insert into [AU_LayerNode] values(0, 0, ‘#^$BlogID$^#‘,‘‘, ‘‘, 0, 0, 0, 0
, ‘2012-01-01‘, 0, 0, 0, 0, 0, 1, 1, 0,‘‘, ‘‘,‘‘, ‘‘,‘‘, ‘‘,‘‘, ‘‘,‘‘, ‘‘, ‘2012-01-01‘, ‘2012-01-01‘, ‘2012-01-01‘, ‘2012-01-01‘, 1, 0)";

 m_sqliteMng.CreateDB(m_strDBFolder + this.toolStripTextBox1.Text + ".db");
            m_sqliteMng.ExecuteSql(m_strCreatTable
                , m_connStr1 + this.toolStripTextBox1.Text + ".db" + m_connStr2);

            string strInsertTaskInitData = m_strInsertTaskInitData.Replace("#^$BlogID$^#", this.toolStripTextBox1.Text);

            m_sqliteMng.ExecuteSql(strInsertTaskInitData
                , m_connStr1 + this.toolStripTextBox1.Text + ".db" + m_connStr2);
m_sqliteMng.CreateDB(m_strDBFolder + this.toolStripTextBox1.Text + ".db");上面这句是创建数据库;m_sqliteMng.ExecuteSql(m_strCreatTable, m_connStr1 + this.toolStripTextBox1.Text + ".db" + m_connStr2);上面这句是在数据库中创建数据库表;m_sqliteMng.ExecuteSql(strInsertTaskInitData, m_connStr1 + this.toolStripTextBox1.Text + ".db" + m_connStr2);上面这句是在数据库表中插入一条默认数据;其中Cls_SqliteMng是封装的一个Sqlite操作类,代码如下:
 class Cls_SqliteMng
    {
        //string m_DBName = "";
        //string connStr = "";

        //创建一个数据库文件,保存在当前目录下HyData文件夹下
        //
        public void CreateDB(string dbName)
        {
           // string databaseFileName = System.Environment.CurrentDirectory + @"/HyData/" + dbName;
            SQLiteConnection.CreateFile(dbName);
        }

        //执行Sql语句
        //创建一个表:  ExecuteSql("create table HyTest(TestID TEXT)");
        //插入些数据:  ExecuteSql("insert into HyTest(TestID) values(‘1001‘)");
        public void ExecuteSql(string sqlStr, string strConStr)
        {
            //connStr = connStr1 + m_DBName + connStr;

            using (DbConnection conn = new SQLiteConnection(strConStr))
            {
                conn.Open();
                DbCommand comm = conn.CreateCommand();
                comm.CommandText = sqlStr;
                comm.CommandType = CommandType.Text;
                comm.ExecuteNonQuery();
            }
        }
    }

对比上一节,另一个修改的地方是,在底层采集器获取到一篇博文回调界面的AddBlog(BlogGather.DelegatePara dp)函数:

  private void AddBlog(BlogGather.DelegatePara dp)
        {
            if (this.InvokeRequired)
            {
                this.Invoke(new BlogGatherCnblogs.GreetingDelegate(this.AddBlog), dp);
                return;
            }

            try
            {
                string strWholeDbName = m_strDBConStringPath + this.toolStripTextBox1.Text + ".db";

                DYH_DB.Model.AU_LayerNode modelAU_LayerNode = new DYH_DB.Model.AU_LayerNode();
                modelAU_LayerNode.AU_ParentLayerNodeID = -1;
                modelAU_LayerNode.AU_LayerNodeID = m_bllAU_LayerNode.GetMaxId(strWholeDbName);
                modelAU_LayerNode.AU_UrlLayer = 0;
                modelAU_LayerNode.AU_UrlAddress = "";
                string strTitle = Regex.Replace(dp.strTitle, @"[|/\;.‘:*?<>-]", "").ToString();
                strTitle = Regex.Replace(strTitle, "[\"]", "").ToString();
                strTitle = Regex.Replace(strTitle, @"\s", "");
                modelAU_LayerNode.AU_UrlTitle = strTitle;
                modelAU_LayerNode.AU_UrlContent = dp.strContent; ;
                modelAU_LayerNode.AU_IsVisit = 0;
                modelAU_LayerNode.AU_RemoveSameOffset1 = 0;
                modelAU_LayerNode.AU_RemoveSameOffset2 = 0;
                modelAU_LayerNode.AU_LastUpdateDate = System.DateTime.Now.Date;

                m_bllAU_LayerNode.Add(strWholeDbName, modelAU_LayerNode);

                DataSet dsTemps = m_bllAU_LayerNode.GetList(strWholeDbName, "");

                this.dataGridView1.DataSource = dsTemps.Tables[0];
                this.dataGridView1.Columns[1].Visible = false;
                this.dataGridView1.Columns[0].Width = this.Width;
            }
            catch (Exception ex)
            {
            }
        }

这里,我们将采集到的博文保存到数据库中,其中用到了动软代码生成器的三层结构,具体代码请自行下载研究。

作者:宋波
出处:http://www.cnblogs.com/ice-river/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
正在看本人博客的这位童鞋,我看你气度不凡,谈吐间隐隐有王者之气,日后必有一番作为!旁边有“推荐”二字,你就顺手把它点了吧,相得准,我分文不收;相不准,你也好回来找我!

时间: 2024-10-08 15:59:11

网络采集软件核心技术剖析系列(6)---将任意博主的全部博文下载到SQLite数据库中并通过Webbrower显示(将之前的内容综合到一起)的相关文章

网络采集软件核心技术剖析系列(5)---将任意博主的全部博文下载到内存中并通过Webbrower显示(将之前的内容综合到一起)

一 本系列随笔概览及产生的背景 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件使用.NET技术开发,为回馈社区,现将该软件中用到的核心技术,开辟一个专栏,写一个系列文章,以飨广大技术爱好者. 本系列文章除了讲解网络采编发用到的各种重要技术之外,也提供了不少问题的解决思路和界面开发的编程经验,非常适合.NET开发的初级,中级读者,希望大家多多支持. 很多初学者常有此类困惑,“为

网络采集软件核心技术剖析系列(1)---如何使用C#语言获取博客园某个博主的全部随笔链接及标题

一 本系列随笔概览及产生的背景 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件使用.NET技术开发,为回馈社区,现将该软件中用到的核心技术,开辟一个专栏,写一个系列文章,以飨广大技术爱好者. 本系列文章除了讲解网络采编发用到的各种重要技术之外,也提供了不少问题的解决思路和界面开发的编程经验,非常适合.NET开发的初级,中级读者,希望大家多多支持. 很多初学者常有此类困惑,“为

网络采集软件核心技术剖析系列(7)---如何使用C#语言搭建程序框架(经典Winform界面,顶部菜单栏,工具栏,左边树形列表,右边多Tab界面)

一 本系列随笔概览及产生的背景 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件使用.NET技术开发,为回馈社区,现将该软件中用到的核心技术,开辟一个专栏,写一个系列文章,以飨广大技术爱好者. 本系列文章除了讲解网络采编发用到的各种重要技术之外,也提供了不少问题的解决思路和界面开发的编程经验,非常适合.NET开发的初级,中级读者,希望大家多多支持. 很多初学者常有此类困惑,“为

网络采集软件核心技术剖析系列(3)---如何使用C#语言下载博文中的全部图片到本地并可以离线浏览

一 本系列随笔概览及产生的背景 本系列开篇受到大家的热烈欢迎,这对博主是莫大的鼓励,此为本系列第三篇,希望大家继续支持,为我继续写作提供动力. 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件使用.NET技术开发,为回馈社区,现将该软件中用到的核心技术,开辟一个专栏,写一个系列文章,以飨广大技术爱好者. 本系列文章除了讲解网络采编发用到的各种重要技术之外,也提供了不少问题的解决

网络采集软件核心技术剖析系列(2)---如何使用C#语言获得任意站点博文的正文及标题

一 本系列随笔概览及产生的背景 本系列开篇受到大家的热烈欢迎,这对博主是莫大的鼓励,此为本系列第二篇,希望大家继续支持,为我继续写作提供动力. 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件使用.NET技术开发,为回馈社区,现将该软件中用到的核心技术,开辟一个专栏,写一个系列文章,以飨广大技术爱好者. 本系列文章除了讲解网络采编发用到的各种重要技术之外,也提供了不少问题的解决

网络采集软件核心技术剖析系列(4)---使用C#语言如何将html网页转换成pdf(html2pdf)

一 本系列随笔概览及产生的背景 本系列开篇受到大家的热烈欢迎,这对博主是莫大的鼓励,此为本系列第四篇,希望大家继续支持,为我继续写作提供动力. 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件使用.NET技术开发,为回馈社区,现将该软件中用到的核心技术,开辟一个专栏,写一个系列文章,以飨广大技术爱好者. 本系列文章除了讲解网络采编发用到的各种重要技术之外,也提供了不少问题的解决

WorldWind源码剖析系列:星球球体的加载与渲染

WorldWind源码剖析系列:星球球体的加载与渲染 WorldWind中主函数Main()的分析 在文件WorldWind.cs中主函数Main()依次作以下几个事情: 1.  使用System.Version在内部,读取软件版本信息,并格式化输出.我们在外面配置软件版本,“关于”部分中版本自动更改. 获取格式化版本号 // Establish the version number string used for user display, // such as the Splash and 

德国精品软件 Throttle 网络加速软件

Throttle(网络加速软件)是PGWare出品的网络加速软件,可自动根据处理器系列及操作系统版本进行优化!Throttle(网络加速软件)号称可以将你的 Internet 连接速度优化到200% 或者更高. 支持14.4.28.8.36.56K.Cable.ISDN.DSL等各种Modem.Throttle 可以使你的拨号连接更稳定和减少重新连接的次数, 这意味着你可以更快地下载和浏览 Internet. Throttle(网络加速软件)软件特点: 优化网速,直接提升下载速度,节约下载时间:

采用VSPD、ModbusTool模拟串口、MODBUS TCP设备进行Python采集软件开发

版权声明:本文为博主原创文章,欢迎转载,并请注明出处.联系方式:[email protected] 不少仪器/设备都提供了数据采集的接口,其中不少是串口或网络的MODBUS/TCP协议. 串口是比较简单,但是较为古老的接口方式,现在的笔记本基本上都没有这种形式的接口了,如果软件开发在笔记本上进行的话,无法调试,或要绕一下用USB转串口的小设备,很不方便. 还好有前辈开发了虚拟串口软件,可以很方便的用于串口通讯的软件开发,我用的是VSPD(网盘).用虚拟串口软件开发有几方面的好处: 1.电脑/笔记