用HttpWebRequest和HttpWebResponse类获取网页等internet上的资源

解决方案 »

  1.   

    要保存“固定范围内的东西”就要对网页的内容(即html字符串)进行分析,然后提取,用正则表达式比较好!
      

  2.   

    http://www.riveastking.com/treatise/program/softSoul.htm
      

  3.   

    还有一个用来分析html的类,再gotdotnet网上能找到叫SgmlReader类,XMLReader类是不能用来分析html代码的!
      

  4.   

    我曾写过一个专门即时提取新浪新闻的服务端程序,只提取到其新闻文章,过滤其它代码,纳入数据库,再作为数据流发分给客户端或网站,作为新闻数据源。
    其中提取目标网页代码的函数:
    //取指定链接网页的源代码
    public string SourceCode(string SinaURL)
    {
    try
    {
    WebClient wc = new WebClient();
    byte[] data = wc.DownloadData(SinaURL);
    string HtmlCode = Encoding.Default.GetString(data);
    wc.Dispose();
    return HtmlCode;
    }
    catch(Exception ex)
    {
    System.Diagnostics.Debug.Write(ex.ToString());
    return null;
    }
    }根据提到的代码再作分析,作下一步的处理。
      

  5.   

    如有兴趣,可以多交流,与我联系:[email protected]
      

  6.   

    新浪新闻下载客户端下载地址:www.news07.net
      

  7.   

    private string Get_Http(string a_strUrl)
    {
    string strResult ;
    try
    {
    HttpWebRequest myReq = (HttpWebRequest)
    System.Net.WebRequest.Create(a_strUrl) ;



    /*NetworkCredential NetIc = new NetworkCredential("yub","168168","yyyy");
    System.Net.WebProxy m=new WebProxy("10.88.10.88",8080); myReq.Proxy=m;
    myReq.Proxy.Credentials=NetIc;*/ System.Net. myReq.PreAuthenticate=true;
    myReq.Credentials=this.Lisen(); HttpWebResponse HttpWResp = (HttpWebResponse)myReq.GetResponse();
    Stream myStream = HttpWResp.GetResponseStream () ;
    StreamReader sr = new StreamReader(myStream , Encoding.Default);
    StringBuilder strBuilder = new StringBuilder();
    while (-1 != sr.Peek())
    {
    strBuilder.Append(sr.ReadLine()+"\r\n");
    }
    strResult = strBuilder.ToString();
    HttpWResp.Close();
    }
    catch(Exception exp)
    {
    strResult = "错误:" + exp.Message ;
    }
    return strResult ; }
      

  8.   

    HttpWebRequest request;
    HttpWebResponse response;
    request=(HttpWebRequest)WebRequest.Create("需要获取html代码的页面地址");
    response=(HttpWebResponse)request.GetResponse();
    System.IO.StreamReader sr=new System.IO.StreamReader(response.GetResponseStream(),System.Text.Encoding.GetEncoding("gb2312"));
    string s=sr.ReadToEnd();
    sr.Close();
    //字符串s就是你想要的
      

  9.   

    我以前写的一个类,有两种方式实现,你看看吧
    using System;
    using System.Text;
    using System.Net;
    using System.Text.RegularExpressions;namespace Efun.Common
    {
    /// <summary>
    /// CatchWebContent 的摘要说明。
    /// </summary>
    public class CatchWebContent
    {
    public CatchWebContent()
    {
    /// <summary>
    /// CatchWebContent获取指定URL地址的页面内容的HTML代码。
    /// </summary>
    }
    public string ByteGetContent(string strUrl)
    {
    ///<summary>
    ///字节方式方式读取网页内容,返回网页内容的全部字符,传入要抓取的网页地址
    ///</summary>

    strUrl =  FormatString(strUrl); string strContent; if (CheckURL(strUrl))
    {
    try
    {
    WebClient myclien = new WebClient();
    byte[] myData; myData = myclien.DownloadData(strUrl);
    strContent = System.Text.Encoding.Default.GetString(myData).ToString().Trim(); return strContent;
    }
    catch(System.Exception Ex)
    {
    return Ex.Message.ToString();
    }
    }
    else
    {
    return "您输入的地址不正确";
    }

    }
    public string ByteGetContentClean(string strUrl)
    {
    ///<summary>
    ///字节方式读取网页内容,返回网页过滤掉HTML标签后内容的字符(保留<br>标记),传入要抓取的网页地址
    ///</summary>

    string strContent;
    strContent = ByteGetContent(strUrl);
    // strContent = Regex.Replace(strContent.ToLower(),@"[^(<body>(.|\n)*<\/body>)]","");
    strContent = Regex.Replace(strContent.ToLower(),@"(?!<br>|<br\/>)<.*?>","");
    return strContent;
    }

    public string StreamGetContent(string strUrl)
    {
    ///<summary>
    ///流方式读取网页内容,返回网页内容的全部字符,传入要抓取的网页地址
    ///</summary>

    strUrl =  FormatString(strUrl); if (CheckURL(strUrl))
    {
    try
    {
    string strContent;
    WebClient myclien = new WebClient(); System.IO.StreamReader mystream = new System.IO.StreamReader(myclien.OpenRead(strUrl),System.Text.Encoding.GetEncoding("gb2312"));
    strContent = mystream.ReadToEnd().ToString().Trim(); return strContent;
    }
    catch(System.Exception Ex)
    {
    return Ex.Message.ToString();
    }
    }
    else
    {
    return "您输入的地址不正确";
    }
    }
    public string StreamGetContentClean(string strUrl)
    {
    ///<summary>
    ///流方式读取网页内容,返回网页过滤掉HTML标签后内容的字符(保留<br>标记),传入要抓取的网页地址
    ///</summary>

    string strContent;
    strContent = StreamGetContent(strUrl);
    // strContent = Regex.Replace(strContent.ToLower(),@"[^(<body>(.|\n)*<\/body>)]","");
    strContent = Regex.Replace(strContent.ToLower(),@"(?!<br>|<br\/>)<.*?>","");
    return strContent;
    } private bool CheckURL(string strUrl)
    {
    ///<summary>
    ///检测输入的地址格式
    ///</summary>

    if (Regex.IsMatch(strUrl,@"(\s|\n|^)(\w+://[^\s\n]+)"))
    {
    return true;
    }
    else
    {
    return false;
    }
    }
    private string FormatString(string strUrl)
    {
    ///<summary>
    ///检测输入的地址格式有没有包含URL前缀
    ///</summary>

    if (strUrl.ToLower().Substring(0,7) != "http://")
    {
    strUrl = "http://" + strUrl;
    }
    return strUrl;
    }
    }
    }
      

  10.   

    晕好像帖的都是怎么得到网页源码的代码.这些sdk文档和高级编程上都有.楼主要得到的应该是进行一系列操作以后得出的网页.不知道这一系列操作是由用户完成还是在程序中完成?
      

  11.   

    aicode(加勒比海盗(一切重新开始 努力学习技术中&&抵制日货))说的很对,不仅需要得到网页上面的内容,还有好多操作呢!这些怎么办啊?哪位高手给给这方面的想法或者思路。比如后退,还有进入哪个链接。因为我的目标上面有些必须点击后才能进入的,把超链接copy找出来没有什么用。
    比如用ASP.DotNet中常用的datagrid,上面所有的操作几乎都是
    <td align="right" width="1%"><input language="javascript" onclick="showOrg(); __doPostBack('_ctl1$benSelOrg','')" name="_ctl1:benSelOrg" id="_ctl1_benSelOrg" type="button" class="button" value="选择" />
                                                </td>
    形式的超链接,所以只能点击才能进入。这个问题怎么解决啊?
      

  12.   

    private void button1_Click(object sender, System.EventArgs e)
    {
    object Zero = 0;
    object EmptyString = "";
    axWebBrowser1.Navigate(textBox1.Text,ref Zero, ref EmptyString, ref EmptyString, ref EmptyString); } private void axWebBrowser1_DocumentComplete(object sender, AxSHDocVw.DWebBrowserEvents2_DocumentCompleteEvent e)
    {
    IHTMLDocument2 HTMLDocument =(IHTMLDocument2) axWebBrowser1.Document;
    IHTMLElementCollection links = HTMLDocument.links; listBox1.Items.Clear(); foreach (HTMLAnchorElementClass el in links)
    {
    listBox1.Items.Add(el.outerHTML);
    } }链接列在listBox1里
      

  13.   


    还要加上
    using mshtml;我觉的用IHTMLDocument2分析网页最简单的
      

  14.   

    谢谢大家的协助,我最最起码知道如何入手了,解决我的问题虽然我还有一段路要走,但是我先结帐,有问题我再发帖子更加有针对性的问问题,这样大家也好回答。
    另外zachary7833(潜龙勿用to飞龙在天) 虽然没有完全回答出来我的问题,但是mshtml对象对我的启发不小所以给的分数多一些。