请问能不能不通过url抓取网页数据
url后面参数屏蔽了

解决方案 »

  1.   

    不通过url通过啥???浏览器能打开你下载不下来检查一下UserAgent,伪装成IE应该打得开,另外参数之间的联系,cookie等都需要一致(不过一般的网页没有这么复杂,只需要设置个UserAgent就可以了)
      

  2.   

      你可以重写URL 屏蔽掉URL地址后面所带的参数
      

  3.   

    http://topic.csdn.net/u/20100119/22/34eeedce-61b9-4080-82f8-53ffa0840685.html?38807
      

  4.   

    请问能不能不通过url抓取网页数据  不能
    url后面参数屏蔽了  再屏蔽也会有包 
      

  5.   

    可通过xmlhttp get、post  获取网页原始HTML、二进制(图像) 内容
    不推荐用IE 对象。
      

  6.   

    为什么CSDN上,这么多人用美女头像?难到真的都是美女~!
      

  7.   


    System.Net.WebClient wc = new System.Net.WebClient();
    Byte[] pageData = wc.DownloadData("网页地址");
    string s= System.Text.Encoding.Default.GetString(pageData);
      

  8.   

    大仙们 到时说说方法啊 upup
      

  9.   


    <@Aattention Content="本Blog原创文章,转载或引用请注明转载" From="Robby.cnblogs.com"@>      由于自己的搜索引擎中做到了这一块内容,所以今天说说如何抓取网页数据、分析并且去除Html标签,给大家提供一个参考。我的平台是Visual Studio2005,C#。—————————————————————割—————————————————————————      首先将网页内容整个抓取下来,这个我就不说了,不是本次话题的重点。假设抓取的数据放在RecvBuffer这个byte[]中(数据从网络上传输过来时不是字符串的形式而是byte),那么我们的第一步就是将RecvBuffer转化为String,以便于对其操作,实例如下:
      // 将接收到的数据增加到响应字符串中
      strResponse += Encoding.ASCII.GetString(RecvBuffer, 0, nBytes);      strResponse即是保存数据的字符串,此处用系统自带的System.Text.Encoding的方法转化RecvBuffer,GetString的第一个参数RecvBuffer就是我们的原始数据,即包含需要解码的字节序列的字节数组;第二个参数0代表第一个要解码的字节的索引,一般就从0开始;第三个参数nBytes为要解码的字节数,可以自己调整。      得到了数据的字符串形式,然后可以对网页进行解析了(其实就是对字符串的各种操作和正则表达式的应用)。下面我以几个例子来说明对网页数据的解析:
      // 解析页面,查找链接
      // 此处尚需扩展,还有某些形式的链接不被识别
      string strRef = @"(href|HREF|src|SRC|action|ACTION|Action)[ ]*=[ ]*[""'][^""'#>]+[""']";
      MatchCollection matches = new Regex(strRef).Matches(strResponse);
      strStatus += "找到: "+matches.Count+" 个链接\r\n";      上面的例子将网页中的链接解析出来,strRef变量表示了正则表达式的模式,变量matches表示符合匹配的项目的集合,后面的Regex(strRef).Matches(strResponse)就是创建正则规则使得strResponse里符合strRef模式的字符串都返回。然后调用matches的变量就可以取得各种信息了。
          当然,这里只能识别一些基本的链接形式,像script中的链接和一些不带“”的链接都没有被支持,这个的扩展还是蛮简单的。
          再举几个更简单点的解析的例子,大家学习学习:
      //获取标题
      Match TitleMatch = Regex.Match(strResponse, "<title>([^<]*)</title>", RegexOptions.IgnoreCase | RegexOptions.Multiline);
      title = TitleMatch.Groups[1].Value;  //获取描述信息
      Match Desc = Regex.Match(strResponse, "<Meta name=\"DESCRIPTION\" content=\"([^<]*)\">", RegexOptions.IgnoreCase | RegexOptions.Multiline);
      strdesc = Desc.Groups[1].Value;  //获取网页的大小
      size = strResponse.Length;
    —————————————————————割—————————————————————————      好了,下面说一下如何去除Html标签,这个想必有很多初学者很需要。其实还是正则表达式和字符串基本操作的应用,由于这个功能还是比较常用的,所以例子写成了函数,便于调用:
      /**//// <summary>
      /// 将Html标签转化为空格
      /// </summary>
      /// <param name="strHtml">待转化的字符串</param>
      /// <returns>经过转化的字符串</returns>
      private string stripHtml(string strHtml)
      {
         Regex objRegExp = new Regex("<(.|\n)+?>");
         string strOutput = objRegExp.Replace(strHtml, "");
         strOutput = strOutput.Replace("<", "&lt;");
         strOutput = strOutput.Replace(">", "&gt;");
         return strOutput;
      }      ok,这样一来Html标签就基本没了,但是有些例外会使得去除不干净,所以建议连续两次转化,这样就搞定了。但是还没结束,如果你留意的话,可以看到上面的函数其实是将Html标签转化为了空格。太多连续的空格会影响之后对字符串的操作。所以再加入这样的语句:
      //把所有空格变为一个空格
      Regex r = new Regex(@"\s+");
      wordsOnly = r.Replace(strResponse, " ");
      wordsOnly.Trim();      好了,大功告成,这里的wordsOnly便是我们最终的成果----去除了Html标签,并去除了多余空格的字符串。
          希望对大家有用!
      

  10.   


    public class PageUtil
      {
      #region 得到网络流
      public static HttpWebResponse GetResponse(string url)
      {
      return GetResponse(url, @"http://www.bfor.cn");
      }
      public static HttpWebRequest CreateRequest(string url)
      {
      return CreateRequest(url, @"http://www.bfor.cn");
      }
      public static HttpWebRequest CreateRequest(string url, string referral)
      {
      WebRequest req = WebRequest.Create(url);  HttpWebRequest wreq = req as HttpWebRequest;
      if (null != wreq)
      {
      wreq.UserAgent = "xiaoxiao";
      wreq.Referer = @"http://www.bfor.cn";
      wreq.Timeout = 60000;
      }
      return wreq;
      }
      public static HttpWebResponse GetResponse(string url, string referral)
      {
      HttpWebRequest request = CreateRequest(url);
      return (HttpWebResponse)request.GetResponse();
      }
      public static string GetPageText(string url, out string referral)
      {
      string str;
      HttpWebResponse response = GetResponse(url);
      using (Stream s = response.GetResponseStream())
      {
      string enc = getEncoding(response);
      if (enc == "")
      enc = "gb2312";
      referral = enc;
      Encoding encode = System.Text.Encoding.GetEncoding(enc);
      using (StreamReader sr = new StreamReader(s, encode))
      {
      str = sr.ReadToEnd();
      }
      }
      response.Close();
      return str;
      }
      private static string getEncoding(HttpWebResponse httpResp)
      {
      string contentType = httpResp.ContentType;//类似“Content-Type: text/html; charset=utf-8;”或“Content-Type: text/html; charset=utf-8”或者“Content-Type: text/html”//注意utf-8后面有可能没有分号
      int i = contentType.IndexOf("charset=");
      string s = httpResp.CharacterSet;
      if (i >= 0)
      {
      i += 8;
      int j = contentType.IndexOf(';', i);
      if (j >= i)
      {
      return contentType.Substring(i, j - i).Trim();
      }
      return contentType.Substring(i);
      }
      return string.Empty;
      }
      #endregion
      }调用  string en;
      string response=string.Empty;
      try
      {
      response= PageUtil.GetPageText(url, out en);  ServiceManager.EditorContainer.LoadText(url, response);  Close();
        
      this.DialogResult = DialogResult.OK;
      }
      catch (Exception ex)
      {
      Util.ShowErrorMessageBox("打开网址'{0}'时出现错误 :\n\n{1}",url, ex.Message);
      }
        
    out 参数,获取页面编码
      

  11.   

    不用url是不可能的的 
    不用url 用ip吗?
      

  12.   

    楼主
    不用url是不可能的,url是获取页面数据的唯一方法(我所知的)。所以 你还是换一种思路吧
    如果仅仅是抓取数据 httpWebRequest足够了
      

  13.   

    楼主试试下面的程序,看行不行!目前还没收集到取不出来的网址,若取不到数据,请说一声。
    读取网络资源,返回字节数组
    http://blog.csdn.net/sxldfang/archive/2010/04/12/5478078.aspx
      

  14.   


    for(i=0;i<ck.length;i++){
    ck[i].style.background="#9c0";
     }
      

  15.   

    HttpWebResponse 可以对web 发起请求
    HttpWebRequest request = WebRequest.Create(URL) as HttpWebRequest;
     HttpWebResponse response = request.GetResponse() as HttpWebResponse;
      Stream responseStream = response.GetResponseStream();取得流之后 你就把字符串读出来,再用上面人教你的正则表达式提取你要的信息!至于人家把URL隐藏很好解决,你找个HTTP嗅探工具,任何和服务器的通信都会被嗅探工具截获,你模仿就行了!
      

  16.   

    获取网页的源代码
    System.Net.WebClient wc = new System.Net.WebClient();
    Byte[] pageData = wc.DownloadData("网页地址");
    string s= System.Text.Encoding.Default.GetString(pageData);你得到数据要,希望做什么处理?
      

  17.   

    没有参数,那看看是不是Post方式传的值呀~