通用网页抓取设计
导言
网页抓取是一个比较简单的工作,主要分为以下三步:一:分析要抓取的网页,获取待抓取的页面地址;二、用下载方式缓存网页,如果网站设置有访问时间限制,就要用这步来缓存;三、分析缓存中的网页,整理数据
在所有步骤中,对于所有的网站,只有获取换取地址、缓存网页、处理网页这几个方式不一定一样,其它的处理方式,都可以认为是一样的
总体接口设计
包括地址抓取、处理、文件缓存、消息传递委托类型,消息类型;
ICatch(抓取接口)
接口说明:
抓取地址接口
1 /// <summary>
2 /// 抓取地址接口
3 /// </summary>
4 public interface ICatch
5 {
6 string StartUrl { set;}
7
8 string StartProcessUrl { set;}
9 /// <summary>
10 /// 显示消息接口
11 /// </summary>
12 ShowMessage SM { set;}
13 /// <summary>
14 /// 要抓取的地址总数
15 /// </summary>
16 int Count { get;}
17
18 /// <summary>
19 /// 当前下载网页的位置
20 /// </summary>
21 int Loc { get;}
22
23 /// <summary>
24 /// 当前处理的位置
25 /// </summary>
26 int ProcessLoc { get;}
27 /// <summary>
28 /// 保存换取到的数据
29 /// </summary>
30 /// <param name="data">数据</param>
31 /// <param name="FileName">要保存的文件名</param>
32 /// <returns></returns>
33 bool Save(byte[] data, string FileName);
34 /// <summary>
35 /// 获取下一个网页地址
36 /// </summary>
37 /// <returns></returns>
38 string GetNextUrl();
39 /// <summary>
40 /// 保存待抓取的网址
41 /// </summary>
42 /// <param name="wb">网页</param>
43 bool SaveUrl(WebBrowser wb);
44
45 /// <summary>
46 /// 处理网页
47 /// </summary>
48 /// <param name="wb">web浏览器</param>
49 /// <returns></returns>
50 bool ProcessUrl(WebBrowser wb);
51
52 /// <summary>
53 /// 获取下一个待处理的网页地址
54 /// </summary>
55 /// <returns></returns>
56 string GetNextProcessUrl();
57 /// <summary>
58 /// 获取下载的地址
59 /// </summary>
60 /// <returns></returns>
61 UrlInfo GetUrl();
62 }
1 /// <summary>
2 /// 抓取地址接口
3 /// </summary>
4 public interface ICatch
5 {
6 string StartUrl { set;}
7
8 string StartProcessUrl { set;}
9 /// <summary>
10 /// 显示消息接口
11 /// </summary>
12 ShowMessage SM { set;}
13 /// <summary>
14 /// 要抓取的地址总数
15 /// </summary>
16 int Count { get;}
17
18 /// <summary>
19 /// 当前下载网页的位置
20 /// </summary>
21 int Loc { get;}
22
23 /// <summary>
24 /// 当前处理的位置
25 /// </summary>
26 int ProcessLoc { get;}
27 /// <summary>
28 /// 保存换取到的数据
29 /// </summary>
30 /// <param name="data">数据</param>
31 /// <param name="FileName">要保存的文件名</param>
32 /// <returns></returns>
33 bool Save(byte[] data, string FileName);
34 /// <summary>
35 /// 获取下一个网页地址
36 /// </summary>
37 /// <returns></returns>
38 string GetNextUrl();
39 /// <summary>
40 /// 保存待抓取的网址
41 /// </summary>
42 /// <param name="wb">网页</param>
43 bool SaveUrl(WebBrowser wb);
44
45 /// <summary>
46 /// 处理网页
47 /// </summary>
48 /// <param name="wb">web浏览器</param>
49 /// <returns></returns>
50 bool ProcessUrl(WebBrowser wb);
51
52 /// <summary>
53 /// 获取下一个待处理的网页地址
54 /// </summary>
55 /// <returns></returns>
56 string GetNextProcessUrl();
57 /// <summary>
58 /// 获取下载的地址
59 /// </summary>
60 /// <returns></returns>
61 UrlInfo GetUrl();
62 }
ICatchData(缓存网页接口)
接口:
缓存数据接口
1/// <summary>
2 /// 缓存数据接口
3 /// </summary>
4 public interface ICatchData
5 {
6 /// <summary>
7 /// 消息接口
8 /// </summary>
9 ShowMessage SM { set;}
10 /// <summary>
11 /// 重设线程数
12 /// </summary>
13 /// <param name="ThreadCount">线程数</param>
14 void ReSetThreadCount(int ThreadCount);
15 /// <summary>
16 /// 初始化下载
17 /// </summary>
18 /// <param name="ca">抓取接口</param>
19 /// <param name="ThreadCount">线程数</param>
20 /// <param name="ThreadSleep">休眠时间</param>
21 /// <param name="RetryCount">出错重试次数</param>
22 void Init(ICatch ca, int ThreadCount, int ThreadSleep,int RetryCount);
23 /// <summary>
24 /// 开始下载
25 /// </summary>
26 void Start();
27 /// <summary>
28 /// 暂停下载
29 /// </summary>
30 void Pause();
31 /// <summary>
32 /// 停止下载
33 /// </summary>
34 void Stop();
35 }
1/// <summary>
2 /// 缓存数据接口
3 /// </summary>
4 public interface ICatchData
5 {
6 /// <summary>
7 /// 消息接口
8 /// </summary>
9 ShowMessage SM { set;}
10 /// <summary>
11 /// 重设线程数
12 /// </summary>
13 /// <param name="ThreadCount">线程数</param>
14 void ReSetThreadCount(int ThreadCount);
15 /// <summary>
16 /// 初始化下载
17 /// </summary>
18 /// <param name="ca">抓取接口</param>
19 /// <param name="ThreadCount">线程数</param>
20 /// <param name="ThreadSleep">休眠时间</param>
21 /// <param name="RetryCount">出错重试次数</param>
22 void Init(ICatch ca, int ThreadCount, int ThreadSleep,int RetryCount);
23 /// <summary>
24 /// 开始下载
25 /// </summary>
26 void Start();
27 /// <summary>
28 /// 暂停下载
29 /// </summary>
30 void Pause();
31 /// <summary>
32 /// 停止下载
33 /// </summary>
34 void Stop();
35 }
小结
只要根据不同的网站实现上面的两个接口,就可以实现网页的抓取,处理,再也不用管理浏览器的怎样加载文件