某个项目的两台应用服务器和两台数据库服务器

单位相当不错!

SQLServer 2000 附加 SQLServer 2005数据库。请对 sysindexes 运行 DBCC CHECKTABLE

SQLServer 2000在直接附加SQLServer 2005数据库时,出现了"错误 602未能在 sysindexes 中找到数据库 ID  中对象 ID  的索引 ID  对应的行。请对 sysindexes 运行 DBCC CHECKTABLE"提示如图。根据提示对 sysindexes 运行 DBCC CHECKTABLE后问题依旧,在Google上反复搜索解决方法失败而归,看来SQLServer 2000 是不能直接附加 SQLServer 2005数据库!

还是老老实实用导入或者SQL建库的方法吧。

微软的web版office,忽悠你没商量

微软在 PDC08 上正式推出了Web版Office ,很显然这是针对Google Docs而推出的。
初步试用了一下,感觉微软在忽悠概念,什么web版的office啊,不能在线编辑、新建,要是想编辑、新建你本地还得安装office,没有本地office你只能看!
微软任重道远啊。

基于.net的简单爬虫分析

  1. 请求发送。一般我写的爬虫都是走http协议的,当然你可以用TCP协议来模拟http request。
    1. http request 发送和response接受,在.Net Framework中HttpWebRequest和HttpWebResponse两个类的封装使得http发送变得很容易,不过这两个类设计到很多http protocol方面的知识,需深入挖一挖。一般都要提供GET和POST两个方法。这里可能会出现gzip压缩的解压,有些网站对于useragent要求不能为空等问题。
    2. 网站编码方式,我们常见的编码方式一般是UTF-8,GBK或者GB2312编码,这里如果网站变化多就需要自动检测出每个网站的编码方式,不然编码搞错了,后果很严重。
    3. Request发送频率,如果你的request太多,容易给对方机器加大负载,可能会被server上某些软件屏蔽掉,最夸张会让对方管理员发现,所以要小心设置一个合适的请求延迟。不知道google的spider的参数怎么得来的,应该也是经验的慢慢积累来着。
    4. Http分析 :很多时候你写spider之前是需要分析一下爬虫源头,这里你需要借助一下工具来完成任务,我常用的是HttpWatch,Fiddler2, IE Developer Toolbar, FireBug,类似还有一些,例如Microsoft Network Monitor, Web Development Helper等。有了这些工具的帮助使得你能够快速了解要抓网页的结构和request的一些细节。
  2. 内容解析。通过request我们拿到response后就需要根据其内容的格式进行解析。列一下可能需要的代码:
    1. 抽取所有链接:
      Regex htmlLinkReg = new Regex(@"(href)[ ]*=[ ]*[""'][^""'> ]+[""'> ]", RegexOptions.IgnoreCase);
    2. 去除html标签和 这样的编码:
      result = Regex.Replace(html, @"<(.[^>]*)>?", replacedWord, RegexOptions.IgnoreCase);
      result = Regex.Replace(result, @"&\w{2,7};", "");
  3. 分布式的架构。这里可能涉及到多客户端的部署,因为很多时候IP算是稀有资源,同一个IP来抓速度还是很慢的,又不敢太快。呵呵。我写过一个分布式爬虫,抓了数千万数据下来。Client我一般是用winform写的,后台开点线程来完成各种爬行任务,它每次从服务器获取一点任务,然后去发送request,解析结果。
    1. 爬行历史:你可能需要将spider的url爬行历史记录保存下来,一方面可以避免重复爬行;另外也可以判断这些url是否在上次爬行后更新过。
    2. 网站更新:如果您需要持续抓取某个网站的内容,你可能需要把首页或者更新相关的页面作为源头,然后抽取出页面所有链接,然后filter出你要解析的页面和已经爬过的页面,然后使用一个队列来存储这些源头,通过进一步加深爬虫深度来找到所有可能新的内容页面,这里你可以使用广度优先搜索或者DFS来递归深入。这里你可能会遇到输入输出速率不匹配的情形,你可能需要依赖一些队列模拟,当然也可以自己通过数据库来实现。
    3. 具体页面爬行:如果您通过数据库等来存储具体内容页面的源头,对于分布式的应用,你可能需要考虑好同步问题。