首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >下载站点的HTML会返回完全不同的结果

下载站点的HTML会返回完全不同的结果
EN

Stack Overflow用户
提问于 2013-03-09 10:59:42
回答 2查看 133关注 0票数 0

我正在使用C#下载网页的超文本标记语言,但是当我检查网页的实际代码和我下载的代码时,它们是完全不同的。代码如下:

代码语言:javascript
复制
public static string getSourceCode(string url) {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
        req.Method = "GET";
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        StreamReader sr = new StreamReader(resp.GetResponseStream());
        string soruceCode = sr.ReadToEnd();
        sr.Close();
        resp.Close();
        return soruceCode;

        using (StreamReader sRead = new StreamReader(resp.GetResponseStream(), Encoding.UTF8)) {

            // veriyi döndür
            return sRead.ReadToEnd();
        }

private void button1_Click(object sender, EventArgs e) {

        string url = "http://www.booking.com/hotel/tr/nena.en-gb.html?label=gog235jc-hotel-en-tr-mina-nobrand-tr-com-T002-1;sid=fcc1c6c78f188a42870dcbe1cabf2fb4;dcid=1;origin=disamb;srhash=3938286438;srpos=5";
        string sourceCode = Finder.getSourceCode(url);
        StreamWriter sw = new StreamWriter("HotelPrice.txt");//Here the code are completly different with web page code.
        sw.Write(sourceCode);
        sw.Close();

        #region //Get Score Value

        int StartIndex = sourceCode.IndexOf("<strong id=\"rsc_total\">") + 23;
        sourceCode = sourceCode.Substring(StartIndex, 3);

        #endregion
    }
EN

回答 2

Stack Overflow用户

发布于 2013-03-09 11:04:37

最有可能的原因是,当您使用浏览器请求相同的页面时,它是会话的一部分,而当您使用WebRequest请求相同的页面时,该会话并未建立。

查看URL,查询参数sid看起来像是一个会话标识符或某种随机数。页面可能会根据实际的会话id进行验证,当它确定它们不同时,它会给出某种"Ooopss..错误种子“之类的响应。

为了模仿浏览器的请求,您必须确保生成正确的请求,该请求可能需要包含以下一个或多个内容:

  • cookies (以前由what服务器发送给您)引用有效/适当的用户代理
  • 一些特定的查询参数(同样取决于expects)
  • potentially a referrer URL
  • authentication credentials

的页面

确定您需要什么的最佳方法是从头到尾跟踪您的浏览器和为该页面提供服务的web服务器之间的对话,并确切地查看请求了哪些页面、请求的顺序以及来回传递的信息。你可以使用WireShark或Fidler来实现这一点--这两个都是免费的工具!

票数 0
EN

Stack Overflow用户

发布于 2013-03-09 13:06:40

我在尝试使用HttpWebRequest抓取页面时遇到了同样的问题,页面使用ajax加载了我想要的所有数据。为了让ajax调用发生,我切换到了WebBrowser控件。

This answer提供了一个如何在WinForms应用程序外部使用该控件的示例。在解析页面之前,您需要连接到浏览器的DocumentCompleted事件。请注意,此事件可能会在页面准备好分析之前多次触发。您可能想要添加如下内容

代码语言:javascript
复制
if(browser.ReadyState == WebBrowserReadyState.Complete)

传递给事件处理程序,以了解页面何时完成加载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15306643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档