基于.net的网站信息采集系统的设计与实现

优采云 发布时间: 2020-08-07 21:29

  1简介

  随着WWW的发展,搜索引擎提供的搜索和导航服务已成为Internet上非常重要的网络服务. 它的特点是可以帮助我们快速找到所需的网站或信息. 在某些情况下,当我们浏览网站时,我们会注意一些特定网站上的信息和数据类型. 我们需要集成此类信息以进行数据挖掘,以进行进一步的分析和使用. 或者我们只想从多个网站采集特定信息. 对格式进行分类和统一后,将其存储在本地数据库中并在其自己的网站上发布,从而提高了信息的及时性并减少了工作量.

  本文讨论了如何使用.Net技术和数据库技术设计网站信息采集系统,并以人才网站上的招聘信息采集为例来说明实现过程.

  2信息获取系统的设计

  2.1采集系统设计思路

  首先,要在指定的网站上采集信息,您必须了解如何浏览信息并记录相应的访问路径. 大多数网站都是使用动态Web技术(ASP,PHP等)构建的,并且通过参数传递来检索数据库并输出相应的信息. 例如,招聘网站通常使用单位名称作为信息的起点. 打开相应的网页后,可以获得指向该单位特定招聘职位的链接,以获得详细的招聘信息.

  第二,采集的信息必须存储在本地数据库中. 有必要对多个目标网站上的信息进行比较和分析,以获得统一的数据模型,并设计相应的数据表,以方便将来不同网站的采集. 传入的信息是统一和结构化的.

  第三,考虑到该网站可能被多次采集,因此有必要避免将重复的信息存储在您自己的数据库中. 同时,对现有信息的重复处理也会降低采集系统的效率. 因此,您可以在记录每条信息时记录相应的URL或相关ID,以便于验证链接是否已被访问.

  2.2相关技术

  1)请求/响应模型

  Web应用程序是基于基于HTTP协议的客户端/服务器请求响应机制的信息交换. 在浏览器中输入网址时,我们需要完成四个步骤: 建立连接,发送请求,发送响应以及关闭连接以获取网页信息.

  .Net框架的名称空间System.Net中提供了两个类WebRequest和WebResponse,它们用于发送客户端请求并从服务器获取响应.

  2)正则表达式

  正则表达式提供了强大,灵活和高效的方法来处理文本. 正则表达式模式匹配可以快速分析大量文本以找到特定的字符模式;提取,编辑,替换或删除文本子字符串;或将提取的字符串添加到集合中.

  在.Net命名空间System.Text.RegularExpressions中,它提供了Regex类来构造正则表达式,还提供了匹配和过滤字符串的相应方法.

  3)ADO.Net

  由采集系统获得的数据最终将存储在本地数据库中. .NET框架中提供了数据库访问技术ADO.NET. 它屏蔽了各种数据源之间的差异,使用统一的接口进行访问,并且由一组访问各种数据源的类组成. 为了提高访问效率,它还为SQL Server,SqlConnection,SqlCommand,SqlDataReader,Dataset,SqlDataAdapter等提供了特殊的类,以完成对SQL Server数据库的访问和数据处理.

  2.3算法描述

  要完成信息采集,我们必须首先过滤掉页面上所需的链接起点,然后系统模拟手动单击过程以读取信息.

  1)根据访问路径创建C#附带的REGEX类的对象,该对象是用于匹配正则表达式的文本类.

  2)通过WebRequest发送请求,WebResponse接收返回的响应,然后通过StreamReader读取返回的响应以形成收录网页所有源代码的字符串.

  3)使用正则表达式匹配字符串以获取Match采集集合,该集合存储了我们需要进一步阅读的所有目标链接.

  4)遍历集合的成员,访问成员链接指向的页面,并在StreamReader读取信息后使用正则表达式提取页面信息. 如果页面是访问路径的末尾,则在读取相应信息后,所有结构化数据都存储在数据库中;如果仅是为了获得下一级链接,请转到1).

  3人才招聘信息采集系统的实现

  1)阅读招聘单位列表信息

  打开由web_url指定的网站页面,并通过StreamReader对象读取网页的源代码,并将其存储在字符串all_code中,这对于正则表达式提取很方便.

  HttpWebRequest all_codeRequest =(HttpWebRequest)WebRequest.Create(web_url);

  WebResponse all_codeResponse = all_codeRequest.GetResponse();

  StreamReader the_Reader = new StreamReader(all_codeResponse.GetResponseStream(),System.Text.Encoding.Default);

  string all_code = the_Reader.ReadToEnd();

  the_Reader.Close();

  2)提取招聘单位的超链接列表

  创建一个表达式字符串p,使用它创建一个正则表达式对象re,并使用re.Matches方法返回all_code字符串的所有匹配超链接集hy.

  字符串p = @“. +”;

  Regex re =新Regex(p,RegexOptions.IgnoreCase);

  Match采集 hy = re.Matches(all_code);

  for(int i = 0; i

  {

  .... //读取单元信息

  …//获取每个招聘单位gw发布的工作链接的集合

  for(int j = 0; j {…//使用正则表达式进行过滤,读取招聘人数,有效时间,学习要求等.

  ... //信息存储在本地数据库的相关表中}

  }

  3)信息存储在本地数据库中

  为了将信息存储在本地数据库的相应表中,SQL Server中设计了一个存储过程InsertJobs来解决相应的数据插入问题. Webid中存储的ID是目标网站用来区分帖子的标识符,InsertJobs根据该帖子检查是否需要将帖子插入数据库中,以确保数据不重复.

  SqlCommand cmd =新的SqlCommand(“ InsertJobs”,con);

  cmd.CommandType = CommandType.StoredProcedure;

  尝试{

  cmd.Parameters.AddWithValue(“ @ companyname”,companyname);

  ……//招聘信息

  cmd.Parameters.Add(“ @ webid”,SqlDbType.BigInt,8); //记录作业ID

  cmd.Parameters [“ @ webid”]. Value = Convert.ToInt64(jid);

  cmd.ExecuteNonQuery();

  }

  catch(Exception){continue;}

  4结论

  使用此设计计划,我们成功地在某个人才网络上采集了信息;实际上,可以对其进行适当的修改来采集其他特定网站上的信息. 由于信息是针对特定网站采集的,因此无需像搜索爬网程序一样扫描整个网站,因此采集速度相对较快. 为了避免在再次采集时重复提取采集到的信息,可以将扫描的链接存储在数据库中,并在读取2.3算法的步骤4中的超链接内容之前进行判断,这样可以提高再次采集时的工作效率.

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线