WEB开发网
开发学院软件开发C语言 用C#2.0实现网络蜘蛛(WebSpider) 阅读

用C#2.0实现网络蜘蛛(WebSpider)

 2009-05-29 08:31:25 来源:WEB开发网   
核心提示: 六、分析网络资源对下载的网络资源进行分析是网络蜘蛛中最重要的功能之一,这里网络资源主要指的是html代码中标签的href属性值,用C#2.0实现网络蜘蛛(WebSpider)(8),状态和状态之间会根据从html文件中读入的字符进行切换,下面是状态之间切换的描述,下面让我们来看看获得的实现

六、分析网络资源

对下载的网络资源进行分析是网络蜘蛛中最重要的功能之一。这里网络资源主要指的是html代码中标签的href属性值。状态和状态之间会根据从html文件中读入的字符进行切换。下面是状态之间切换的描述。

状态0:读入'<'字符后切换到状态1,读入其他的字符,状态不变。

状态1:读入'a'或'A',切换到状态2,读入其他的字符,切换到状态0。

状态2:读入空格或制表符(\t),切换到状态3,读入其他的字符,切换到状态0。

状态3:读入'>',成功获得一个,读入其他的字符,状态不变。为了更容易说明问题。在本文给出的网络蜘蛛中只提取了html代码中中的href属性中的url。本文中所采用的分析方法是分步进行提取href。首先将html代码中的标签整个提出来。不包括和前面的字符,如comprg中只提取,而comprg将被忽略,因为这里并没有url。

本文使用了一个状态机来的提取,这个状态机分为五个状态(0 至 4)。第一个状态是初始态,最后一个状态为终止态,如果到达最后一个状态,说明已经成功获得了一个

状态机如图1所示。

用C#2.0实现网络蜘蛛(WebSpider)

图1

最后一个双环的状态是最终态。下面让我们来看看获得的实现代码。

getA方法的实现

 // 获得html中的
  private void getA()
  {
  char[] buffer = new char[1024];
  int state = 0;
  String a = "";
  while (!sr.EndOfStream)
  {
  int n = sr.Read(buffer, 0, buffer.Length);
  for (int i = 0; i < n; i++)
  {
  switch (state)
  {
  case 0: // 状态0
  if (buffer[i] == '<') // 读入的是'<'
  {
  a += buffer[i];
  state = 1; // 切换到状态1
  }
  break;
  case 1: // 状态1
  if (buffer[i] == 'a' || buffer[i] == 'A') // 读入是'a'或'A'
  {
  a += buffer[i];
  state = 2; // 切换到状态2
  }
  else
  {
  a = "";
  state = 0; // 切换到状态0
  }
  break;
  case 2: // 状态2
  if (buffer[i] == ' ' || buffer[i] == '\t') // 读入的是空格或'\t'
  {
  a += buffer[i];
  state = 3;
  }
  else
  {
  a = "";
  state = 0; // 切换到状态0
  }
  break;
  case 3: // 状态3
  if (buffer[i] == '>') // 读入的是'>',已经成功获得一个
  {
  a += buffer[i];
  try
  {
  string url = getUrl(getHref(a)); // 获得中的href属性的值
  if (url != null)
  {
  if (findUrl != null)
  findUrl(url); // 引发发现url的事件
  }
  }
  catch (Exception e)
  {
  }
  state = 0; // 在获得一个后,重新切换到状态0
  }
  else
  a += buffer[i];
  break;
  }
  }
  }
  }

上一页  3 4 5 6 7 8 9 10  下一页

Tags:实现 网络 蜘蛛

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接