簡體   English   中英

從具有C#加載頁面的網站獲取HTML代碼

[英]Get HTML code from a website that has a loading page in C#

我正在使用本文中的代碼: 從C#網站獲取HTML代碼

將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?

最好的祝福

我嘗試讀取的頁面有一個臨時加載器頁面

這完全取決於它的含義以及“臨時加載程序頁面”的工作方式。 例如,如果該頁面(無論是從JavaScript代碼還是HTML META重定向)向目標頁面發出請求,那么您需要捕獲請求。 目前,您正在從給定的URL閱讀:

(HttpWebRequest)WebRequest.Create(url)

這實際上是對該URL發出GET請求並讀取響應。 但是根據您的描述,聽起來這是錯誤的URL。 聽起來好像有第二個 URL,其中包含您要查找的實際信息。

鑒於此,您實際上有兩個選擇:

  1. 通過訪問頁面並檢查瀏覽器中的請求,手動確定其他URL是什么,並將其用作代碼中url的值。
  2. 確定其他URL本身是如何由第一個URL的頁面代碼確定的(它是否嵌入在頁面源代碼中的某處?),將其從您從第一個url值獲得的響應中解析出來,然后向新網址。

顯然,第一種選擇要容易得多。 僅當第二個URL隨每次訪問而變化或預期隨時間頻繁變化時,才需要第二個URL。 如果是這樣,那么您就必須對網站如何執行第二個請求進行反向工程,以便您也可以執行它。

Web抓取很快就會變得很復雜,並且經常變成抓取內容的人與托管內容的人(可能不希望抓取內容的人)之間的貓捉老鼠的游戲(甚至是無意識且相互不了解的)。

你為什么不使用網絡瀏覽器並延遲

await Task.Delay(n)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM