基于.net的网站信息采集系统的设计与实现
优采云 发布时间: 2020-08-07 21:291简介
随着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中的超链接内容之前进行判断,这样可以提高再次采集时的工作效率.