当前位置:编程学习 > C#/ASP.NET >>

如题 HttpWebRequest抓取的内容为什么和IE上的源码不一样

如题 HttpWebRequest抓取的内容为什么和IE上的源码不一样

HttpWebRequest抓取百度搜索的内容和IE上显示的内容不一样,是因为JS搞的鬼么。。要怎么解决呢?

我看过内容之后是js搞的鬼,因为我实际得到的源文件内容里面什么也没有,只有在body中有个onload方法,所以页面又跳到另个连接了

求解决方法

我不想解析js方法
大侠还有没有一点好的办法,直接能让我获得到想要的页面源文件啊 --------------------编程问答-------------------- 各位大侠,救命啊,急急急急急急急急急急急急急急急! --------------------编程问答-------------------- JS搞的什么鬼?JS还不是需要调用服务端的程序来输出内容,直接抓服务端的内容来分析就是了。 --------------------编程问答-------------------- 服务器判断UserAgent了,如果不是常用浏览器的UserAgent就给你返回错误的内容。
你把UserAgent修改为IE的就可以
youhttprequest.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)"; --------------------编程问答-------------------- 3楼正解 --------------------编程问答-------------------- 我改了,怎么不起作用了 --------------------编程问答--------------------  try
        {
            m_uri = new Uri(_url);
            m_links = new List<Link>();
            m_html = "";
            m_outstr = "";
            m_title = "";
            m_good = true;
            if (_url.EndsWith(".rar") || _url.EndsWith(".dat") || _url.EndsWith(".msi"))
            {
                m_good = false;
                return;
            }
            HttpWebRequest rqst = (HttpWebRequest)WebRequest.Create(m_uri);
            rqst.AllowAutoRedirect = true;
            rqst.MaximumAutomaticRedirections = 3;
            //rqst.UserAgent = "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)";
            rqst.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727)";
            rqst.KeepAlive = true;
            rqst.Timeout = 30000;
            lock (WebPage.webcookies)
            {
                if (WebPage.webcookies.ContainsKey(m_uri.Host))
                    rqst.CookieContainer = WebPage.webcookies[m_uri.Host];
                else
                {
                    CookieContainer cc = new CookieContainer();
                    WebPage.webcookies[m_uri.Host] = cc;
                    rqst.CookieContainer = cc;
                }
            }

            HttpWebResponse rsps = (HttpWebResponse)rqst.GetResponse();

            Stream sm = rsps.GetResponseStream();
            if (!rsps.ContentType.ToLower().StartsWith("text/") || rsps.ContentLength > 1 << 22)
            {
                rsps.Close();
                m_good = false;
                return;
            }
            Encoding cding = System.Text.Encoding.Default;
            string contenttype=rsps.ContentType.ToLower();
            int ix = contenttype.IndexOf("charset=");
            if (ix != -1)
            {

                try
                {
                    cding = System.Text.Encoding.GetEncoding(rsps.ContentType.Substring(ix + "charset".Length + 1));
                }
                catch
                {
                    cding = Encoding.Default;
                }
                m_html = new StreamReader(sm, cding).ReadToEnd();
            }
            else
            {
                m_html = new StreamReader(sm, cding).ReadToEnd();
                Regex regex = new Regex("charset=(?<cding>[^=]+)?\"",RegexOptions.IgnoreCase);
                string strcding = regex.Match(m_html).Groups["cding"].Value;
                try
                {
                    cding = Encoding.GetEncoding(strcding);
                }
                catch{
                    cding = Encoding.Default;
                }
                byte[] bytes=Encoding.Default.GetBytes(m_html.ToCharArray());
                m_html = cding.GetString(bytes);
                if (m_html.Split('?').Length > 100)
                {
                    m_html=Encoding.Default.GetString(bytes);
                }
            }

            
            m_pagesize = m_html.Length;
            m_uri = rsps.ResponseUri;
            rsps.Close();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message+m_uri.ToString());
            m_good = false;
            
        } --------------------编程问答-------------------- 这是我的源码,帮忙看看有什么不对的 --------------------编程问答-------------------- 看看JS,有可能在加载后做了处理哦~ --------------------编程问答--------------------
引用 8 楼 baysos 的回复:
看看JS,有可能在加载后做了处理哦~

的确是在加载后处理过的,有什么办法能和IE显示的一样啊 --------------------编程问答--------------------
引用 9 楼 anloveddc 的回复:
引用 8 楼 baysos 的回复:
看看JS,有可能在加载后做了处理哦~

的确是在加载后处理过的,有什么办法能和IE显示的一样啊

这个好像没遇到过哦~ 如果你勤快的话~可以分析下JS代码,用c#的方式重新对代码进行处理……哈哈啊·当我没说。。嘎嘎
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,