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。
string p = @".+";
Regex re = new Regex(p, RegexOptions.IgnoreCase);
MatchCollection hy = re.Matches(all_code);
for (int i = 0; i < hy.Count; i++)
{
….//读取单位信息
…//获得每个招聘单位发布的岗位链接集合gw
for(int j=0;j { …//使用正则表达式过滤,读取岗位招聘人数、有效时间、学历要求等
…//信息存入本地数据库相关表中}
}
3、信息存入本地数据库
为将信息存入本地数据库对应的表,在SQL Server中设计了一个存储过程InsertJobs,用来解决相应的数据插入问题。其中webid中存放ID是目标网站用于区分岗位的标识,InsertJobs根据其检查该岗位是否需要插入数据库,保证数据不重复。
SqlCommand cmd = new SqlCommand("InsertJobs", con);
cmd.CommandType = CommandType.StoredProcedure;
try {
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步读取超链内容前进行判断,则可以提高再次采集时的工作效率。