偶然一次在vs2012默认的项目文件夹里发明了以前本身做的一个关于SEO的类库,主要是用来盘问某个网址的收录次数还有网站的排行数,后来重构了下,今天拿出来写篇文章,说说本身是如何思考的并完成的。
二、问题描述
首先需要考虑的是能够撑持哪些搜索引擎的盘问,首先是百度,然后是必应、搜狗、搜搜、360。原来想撑持Google但是一想不同错误,根柢欠好访谒的,所以暂时不算在内。而我们实际要做的就是按照一个网址能够检索出这个网址的在各个搜索引擎的收录次数以及在差别关键词下的网址排行,这里收支的只有网址还有若干的关键词,而输出则是该网址在差别搜索引擎下的收录次数以及在各个关键词下的排行数。
但是这里有个问题,就是排行数,如果检索的网址在前100还好,如果排名很后面,那么问题就来了,那样会让用户期待很永劫间才华看到功效,但是用户可能只想知道排行前100的具体排名,而那些赶过的则只要显示100以后就可以了,而这些就需要我们前期考虑好,这样后面的措施才好做。
三、解决思路
相信很多人都能够想到,就是操作WebClient将将需要的页面下载下来,然后用正则从中获取我们感兴趣的部分,然后操作措施去措置惩罚惩罚。而关键难度就是在这个正则的编写,,首先我们先从简单的开始。
四、收录次数
首先是网站的收录次数,我们可以在百度中输入site:然后我们就可以看到如下的页面:
而我们所需要的收录次数就是 5,280,000 这段数字,我们接着检察页面元素:
接着我们再不雅察看其他的搜索引擎可以发明都是类似的,所以我们的思路这个时候应该就得出了,最后就是如何组织网址,这部分我们看地点栏?wd=site%3A%2F这段就知道怎么写了。
稍等这个时候我们可能心急一个一个实现,这样后面我们就没法集中的挪用,同时也会影响以后的新增,所以我们要规定一个要实现收录数成果的抽象类,这样就能够在不知晓具体实现的情况统一使用,并且还能够在以后轻松的新增新的搜索引擎,而这种方法属于计谋模式(Stategry),下面我们来慢慢分析出这个抽象类的具体内容。
首先每个实现这个抽象类的具体类都应该是对应某个搜索引擎,那么就需要有一个根基网址,同时还要留下占位符,好比按照上面百度的这个我们就得出这样一个字符串
?wd=site%3A{0}
此中{0}就是为真正需要检索网址的占位符,获取下载页面的路径是所有具体类都需要的所以我们直接将实现放在抽象类中,好比下面的代码:
代码如下:
/// <summary>
/// 处事供给者
/// </summary>
protected String SearchProvider { get; set; }
/// <summary>
/// 需要检索的网址
/// </summary>
protected String SiteUrl { get; set; }
/// <summary>
/// 搜索处事供给网址
/// </summary>
protected String BaseUrl { get; set; }
/// <summary>
/// 后页面网址
/// </summary>
/// <param name=”site”>需要盘问的网址</param>
/// <returns>拼接后的网址</returns>
protected String GetDownUrl(string site)
{
return string.Format(BaseUrl, HttpUtility.UrlEncode(site));
}