从具有 C# 加载页面的网站获取 HTML 代码
Posted
技术标签:
【中文标题】从具有 C# 加载页面的网站获取 HTML 代码【英文标题】:Get HTML code from a website that has a loading page in C# 【发布时间】:2014-08-16 09:51:28 【问题描述】:我正在使用这篇文章中的代码: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?
最好的问候
【问题讨论】:
【参考方案1】:我正在阅读的页面有一个临时加载页面
这完全取决于这意味着什么以及“临时加载页面”如何工作。例如,如果该页面(无论是来自 javascript 代码还是某些 HTML META 重定向)向目标页面发出请求,那么 that 请求就是您需要捕获的内容。目前您正在从给定的 URL 读取:
(HttpWebRequest)WebRequest.Create(url)
这实质上是向该 URL 发出 GET 请求并读取响应。但是根据您的描述,这听起来像是错误的 URL。听起来有一个 second URL,其中包含您要查找的实际信息。
鉴于此,您基本上有两种选择:
-
通过访问页面并检查浏览器中的请求来手动确定其他 URL 是什么,并将其用作代码中
url
的值。
确定 如何 其他 URL 本身是由第一个 URL 的页面代码确定的(它是嵌入在页面源中的某处吗?),从您从第一个得到的响应中解析它url
值,然后向新 URL 发出第二次请求。
显然,第一个选项要容易得多。仅当第二个 URL 随每次访问而更改或预计会随着时间的推移而频繁更改时,才需要第二个 URL。如果是这种情况,那么您基本上必须对网站如何执行第二个请求进行逆向工程,以便您也可以执行它。
网络抓取很快就会变得复杂,并且经常变成抓取内容的人和托管内容的人(他们可能不希望内容被抓取)之间的猫捉老鼠游戏(甚至是无意和相互不知道的) .
【讨论】:
感谢您的回复,但是我已经检查了 url 是否更改,但它没有更改。完全一样。我猜它使用某种类型的javascript加载,但我似乎无法绕过它。有没有办法打开该页面并在阅读 html 代码之前等待几秒钟? @WtFudgE:我不确定“等待几秒钟”是什么意思。您需要确定的是初始页面是否真的包含您正在寻找的数据(也许它只是被设置为不可见,然后通过 JavaScript 使其可见),或者它是否加载了来自对服务器的单独调用的数据。浏览器地址栏中的 URL 可能不会更改,但如果您要查找的数据来自单独的请求,那么 那就是您要发出的请求。检查浏览器的调试工具以检查网络请求。【参考方案2】:你为什么不使用 webbrowser 并使用延迟
await Task.Delay(n)
【讨论】:
以上是关于从具有 C# 加载页面的网站获取 HTML 代码的主要内容,如果未能解决你的问题,请参考以下文章