代码: 
   private void SnatchHtml()
    {
        string strResult = "";
        /// 请求页面地址
        string strPageUrl = "http://www.wuliu800.com/peihuo/PeiHuoDataList.aspx?from_province=北京";
        /// 声明一个HttpWebRequest请求
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strPageUrl);
        /// 连接超时时间
        request.Timeout = 30000;
        request.Headers.Set("Pragma", "no-cache");
        request.Accept = "image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/*";
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream streamReceive = response.GetResponseStream();
        Encoding encoding = Encoding.GetEncoding("GB2312");
        ///Encoding encoding = Encoding.GetEncoding("utf-8");
        StreamReader streamReader = new StreamReader(streamReceive, encoding);
        strResult = streamReader.ReadToEnd();     }
但是抓取页面后 Table 中的Tr都没有抓取到不知道为什么,查看源文件都可以看到!
请高手帮忙解决一下啊!谢谢了
抓取后内容,只显示了body部分
<body> 
<table border="0" cellpadding="0" class="DataGrid" cellspacing="0" width="98%" >
</table>
</body>
在线等......

解决方案 »

  1.   

    这个table 可能是ajax方式..或则 js来附值的.
      

  2.   

    查看源文件当前可以了,脚本是运行过的..你使用HttpWebRequest 没运行JS脚本呢..使用WebBrowser来获取把
      

  3.   

    如果是js动态添加的Table,那就麻烦了,你抓取数据的时候不可能去执行JS的呀。
      

  4.   

    WebBrowser???
    有没有例子呀??
      

  5.   

       WebBrowser _WebBrowser = new WebBrowser();            _WebBrowser.Url = new Uri("http://topic.csdn.net/u/20090615/13/ad24c9a4-78df-49c2-b218-47991b575d2b.html?3700");            while (_WebBrowser.ReadyState != WebBrowserReadyState.Complete)
                {
                    Application.DoEvents();
                }            _WebBrowser.DocumentStream.Position = 0;
                StreamReader _Stream = new StreamReader(_WebBrowser.DocumentStream);            string _Value = _Stream.ReadToEnd();
    这样看看.
      

  6.   

    正确代码如下,Form1_Load的内容你可以放到按钮事件里执行。其中isopen判断是否打开过一次,这是必须的,楼主你可以自己将isopen的判断去掉,会显示多次那个网页的源码。        WebBrowser browser;
            bool isopen = false;
            public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                browser = new WebBrowser();
                browser.Navigate("http://www.google.cn/");
                isopen = false;
                browser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(browser_DocumentCompleted);
            }        void browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
            {
                if (browser.ReadyState == WebBrowserReadyState.Complete && !isopen)
                {
                    MessageBox.Show(browser.DocumentText);
                    isopen = true;
                }
            }
      

  7.   

    谢谢 zgke 和 qldsrx 二位的帮助,问题解决了,现在可以得到完整的代码!
      

  8.   

    还有一个问题 ASP.NET中有没有这样的方法
      

  9.   

    ASP.NET也可以引用Winform中的控件的,你只要添加相关dll的引用,比如System.Windows.Forms。
      

  10.   

    好的 谢谢
    再次谢谢大家的帮助
    zgke 和 qldsrx  二位代码都可以正常使用!
      

  11.   

    http://epub.cnki.net/grid2008/brief/result.aspx?DbPrefix=SCDB&DbCatalog=%e4%b8%ad%e5%9b%bd%e5%ad%a6%e6%9c%af%e6%96%87%e7%8c%ae%e7%bd%91%e7%bb%9c%e5%87%ba%e7%89%88%e6%80%bb%e5%ba%93&ConfigFile=SCDB.xml&db_value=CJFQ%2CCDFD%2CCMFD%2CCPFD%2CCCND%2CSCPD%2CSCSD%2CSNAD%2CSOSD%2CCYFD%2CCBFD&NaviField=%E4%B8%93%E9%A2%98%E5%AD%90%E6%A0%8F%E7%9B%AE%E4%BB%A3%E7%A0%81&orderby=relevant&au_1_sel2=%e6%9c%ba%e6%9e%84%2c%e5%8d%95%e4%bd%8d%2c%e5%ad%a6%e4%bd%8d%e6%8e%88%e4%ba%88%e5%8d%95%e4%bd%8d%2c%e4%bd%9c%e8%80%85%e6%9c%ba%e6%9e%84&au_1_value2=%e5%b1%b1%e8%a5%bf%e8%b4%a2%e7%bb%8f%e5%a4%a7%e5%ad%a6
    这种页面怎么读呢?那位大侠知道