内容采集软件(网络采集软件核心技术剖析系列(3)--如何使用C#语言)

优采云 发布时间: 2022-01-04 22:08

  内容采集软件(网络采集软件核心技术剖析系列(3)--如何使用C#语言)

  一系列论文的概述和背景

  自主研发的DouJohnson博客备份专家软件工具自问世3年多以来,深受博客写作和阅读爱好者的喜爱。同时,也有一些技术爱好者向我咨询如何实现这个软件中的各种实用功能。

  该软件是使用.NET 技术开发的。为回馈社会,特开设软件使用的核心技术专栏,为广大技术爱好者写了一系列文章。

  本系列文章不仅讲解了网络采集、编辑、发布中用到的各种重要技术,还提供了很多界面开发中的解题思路和编程经验。非常适合.NET开发的初学者和中级读者。希望请多多支持。

  很多初学者经常会有这种困惑,“为什么我看了这本书,对C#的方方面面都了如指掌,却写不出一个像样的应用程序?”,

  其实我还没有学会如何综合运用所学的知识,锻炼编程思维,培养学习兴趣。我认为这个系列文章 可能对你有帮助,我希望如此。

  开发环境:VS2008

  本节源码位置:

  源码下载方法:安装SVN客户端(文末提供下载地址),然后查看如下地址:

  文章系列大纲如下:

  网络采集软件核心技术解析系列(1)---如何使用C#语言获取博客园中某博主的所有文章链接和标题

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

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

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

  网络采集软件核心技术解析系列(5)---将任意博主的所有博文下载到内存中,通过Webbrower展示

  网络采集软件核心技术分析系列(6)---将任何博主的所有博文下载到SQLite数据库中,通过Webbrower展示

  网络采集软件核心技术解析系列(7)---如何使用C#语言搭建程序框架(经典Winform界面、菜单栏、树形列表、多标签界面)

  网络采集软件核心技术解析系列(综合实例)

  2.第五节主要内容介绍(将任一博主的所有博文下载到内存中,并通过Webbrower显示)

  将任何博主的所有博文下载到内存中,并通过Webbrower显示解决方案。演示如下图所示: 可执行文件下载

  

  三个基本原则

  在本节中,我们提供一个示例,将本系列第一节和第二节的内容整合起来,实现博客园中任何博主的所有博文的下载。只要用户在编辑框中输入博客园中任意一位博主的ID,博主的所有文章都会被下载到内存中。我们将在本节中分析其实现原理。

  采集博客*敏*感*词*如下:

  

  总体步骤如下:

  1. 用页地址(其实是栈数据结构)初始化Url队列,详细请参考本系列第一节;

  2. 调度器不断从Url队列中获取URL,从互联网获取URL对应的网页正文;

  3.多线程网络爬虫分析下载的网页正文是链接提取页还是文章正文页;

  (1)如果是链接提取页面,将所有符合规则的文章链接提取出来,然后push到之前的Url队列中(其实是栈操作,这里可以理解为分页页面地址换取 几十个文章链接地址后,调度器获取的下一个链接就是这几十个文章链接地址,全部下载并存入数据存储器,然后接下来将轮到fetch第二个分页页面,通过对比提供的代码就可以理解这一点,这里是网络爬虫的精髓)。

  (2)如果是文章文本页面,根据文本css路径提取文本并存入数据存储(本节为datatable)。具体请参考第二节这个系列的。

  4. 递归执行步骤2和3,直到Url队列为空或者已经确定所有文章下载完成(见第1节),程序结束。

  核心代码如下:

  private void ParseWebPage(string strVisitUrl, string strPageContent, DoWorkEventArgs e)

{

string strUrlFilterRule = GetUrlFilterRule();

if (!IsFinalPage(strVisitUrl, strUrlFilterRule))

{

bool bNoArticle = SaveUrlToDB(strVisitUrl, strPageContent, e);

if (!bNoArticle)

{

BlogGatherNext(e);

}

}

else

{

if (strPageContent != "")

{

string strTitle = SaveFinalPageContent(""

, GetMainContentCss(), strVisitUrl, strPageContent);

}

BlogGatherNext(e);

}

}

  IsFinalPage(strVisitUrl, strUrlFilterRule),这行代码根据本次请求的url和<的url规则判断当前获取的页面是最终的文章页面还是文章链接提取页面@文章 链接。实现代码如下:

   protected bool IsFinalPage(string strVisitUrl, string strUrlFilterRule)

{

bool bRet = false;

MatchCollection matchsTemp = Regex.Matches(strVisitUrl.ToString(), strUrlFilterRule, RegexOptions.Singleline);

if (matchsTemp.Count > 0)

{

bRet = true;

}

return bRet;

}

  补充说明,什么是链接提取页面?如下图所示:

  

  更详细的代码请自行下载学习。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线