从包含C#加载页面的网站获取HTML代码

时间:2014-06-25 17:50:44

标签: c# html web

我正在使用此帖子中的代码:Get HTML code from website in C#

将html保存在字符串中

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (response.StatusCode == HttpStatusCode.OK)
{
    Stream receiveStream = response.GetResponseStream();
    StreamReader readStream;
    if (response.CharacterSet == null)
        readStream = new StreamReader(receiveStream);
    else
        readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
    string data = readStream.ReadToEnd();
    response.Close();
    readStream.Close();

    msgBox.Text = data;
}

然而,我试图阅读的页面有一个临时的加载页面,我怎么能解决这个问题,它试图在实际加载这个页面之后再次保存html?

祝你好运

2 个答案:

答案 0 :(得分:2)

  

我试图阅读的页面有一个临时的加载页面

这完全取决于这意味着什么以及如何"临时加载页面"作品。例如,如果该页面(无论是来自JavaScript代码还是某些HTML META重定向)向目标页面发出请求,那么 请求就是您需要捕获的内容。目前您正在阅读指定的网址:

(HttpWebRequest)WebRequest.Create(url)

这实质上是对该URL发出GET请求并读取响应。但根据您的描述,这听起来像是错误的网址。这听起来像是第二个网址,其中包含您正在寻找的实际信息。

鉴于此,您基本上有两个选择:

  1. 通过访问该页面并检查浏览器中的请求并在代码中将其用作url的值来确定其他URL的手动操作。
  2. 确定 其他网址本身是由第一个网址的网页代码确定的(是否在某个网页源代码中嵌入了什么内容?),将其从第一个网址的响应中解析出来url值,并向新网址发出第二个请求。
  3. 显然,第一个选项要容易得多。如果第二个URL随着每次访问而变化,或者预计会随着时间的推移频繁变化,则仅需要第二个URL。如果是这种情况,那么您必须对网站执行第二个请求的方式进行逆向工程,以便您也可以执行此操作。

    网页抓取很快就会变得复杂,并且在抓取内容的人和托管内容的人(可能不希望被抓取)之间经常变成猫捉老鼠的游戏(甚至无意间和相互不知情)

答案 1 :(得分:0)

为什么不使用webbrowser并使用

延迟
await Task.Delay(n)