我现在需要做一个采集程序,采集量比较大 带宽比较有限 遇到三点问题
1.能否在获取网页源代码的时候截取一部分获取 比如获取前5kb的网页源代码 就和迅雷断点续传一样 中途中断连接,
2.有些网站对采集程序做了限制 返回源代码是错误的 难道webrequest没有办法完全模仿ie去获取一个网页么?
3.有些网站在连接数上做了限制 一个ip只有两个链接 我开50个线程去访问这个站 也就是开50个链接,结果有48个等待 慢慢的这些等待的线程越来越多 最后导致连接数过多断网。这个有没有办法解决 和判断链接是否处于等待状态把它自动结束掉或者重新再连或者有其他更好的办法

解决方案 »

  1.   

    1: 
    Stream receiveStream = hwrp.GetResponseStream(); 
                        StreamReader readStream = new StreamReader(receiveStream); 
                        Char[] read = new Char[256]; 
                        // Reads 256 characters at a time.    
                        int count = readStream.Read(read, 0, 256); 
                        if (count > 0) 
                        { 
                            if (SniffWeb.pre_url.Count < 1000) 
                            { 
                                SniffWeb.pre_url.Add(urlString); 
                            } 
                        } 
    可见是不是可以只取部分? 2: 
    设置好header或者cookie之类,应该能够达到一般要求吧 
      

  2.   

    1.Stream 网络流没有当前位置的统一概念,因此一般不支持查找。
      方法(1):可以试试Request.QueryString获取返回的数据流,再比较。
      方法式(2):
         HttpWebResponse res;
       HttpWebRequest req;
       try
       {
       req=(HttpWebRequest)WebRequest.Create(webstr);
       res=(HttpWebResponse)req.GetResponse();
       }
       catch (Exception)
       { 
       MessageBox.Show("出错了banyi","对不起找不到该网址");
       
       return;
       } 
       
       StreamReader strm=new StreamReader(res.GetResponseStream(),Encoding.GetEncoding(54936));//简体中文Encoding.GetEncoding(54936),Encoding.ASCII
       string sLine;
       string sLine2;
       sLine2="";
       
       do //学习笔记do循环C# do while 循环体 loop do until 循环体 loop
       {
       sLine=strm.ReadLine();
       sLine2=sLine2+sLine;
       }
       while (sLine!=null);
       strm.Close();
       ul(sLine2);
       
       }
       }
      }
      

  3.   

    谢谢楼上的回答 但是我最后一个问题没有回答 还有上面 你们所说的 可见是不是可以只取部分 这个是什么意思 不太明白 第二个问题 我设置好headers 和cookies 但是还是无法被网站识别 不知道什么原因 还有其他被识别的地方么 与ie到底还有什么区别 
      

  4.   

    1. 你需要确认对方服务器支不支持断点续传功能。如果支持。可以发送HTTP请求的时候带上只传输指定数据段的那个关键词
    2. 模拟IE貌似仅仅是在HTTP请求头上加User-Agent关键词就可以了
    3. 你开50个线程去访问网站,怎么又会越堆越多啊?除非你是在无限制地建立线程。我觉得解决访问IP限制的方法就是,让其他的线程去采集其他网站的数据。