簡體   English   中英

如何在C#中獲取完整的網頁HTML?

[英]How to get full webpage HTML in c#?

我正在嘗試制作一個網絡爬蟲來收集新聞,但是我無法獲取網頁的完整html內容。 這是我最初需要為文章搜索結果抓取的網址

然后,我抓取每篇文章( 示例 )。

我嘗試使用WebRequest,HTTPWebRequest和WebClient發出請求,但是每次返回的結果僅包含側邊欄的html內容,等等。我使用了Chrome開發人員工具,返回的html在主要內容之后開始頁面,因此無濟於事。 我也一直在尋找內容的ajax調用,卻找不到任何內容。

我已經能夠使用Selenium Webdriver成功地抓取所需的內容,但是這並不理想,因為訪問每個URL的速度要慢得多,而且經常會導致加載頁面。 請求頁面的完整html內容的任何幫助將不勝感激。

我不確定您遇到什么問題,但是這是我完成任務的方式。

首先,我在Web瀏覽器中查看了該頁面,並在開發人員工具中打開了“網絡”標簽。

從這里,我收集了我的真實瀏覽器發送的標頭列表。 然后,我構造了一個HttpWebRequest,附加了后續的標頭,並且能夠檢索該頁面的完整html。

public string getHtml()
{
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.fa-mag.com/search.php?and_or=and&date_range=all&magazine=&sort=newest&method=basic&query=ubs");

    req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0";
    req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
    req.AllowAutoRedirect = false;
    req.Headers.Add(HttpRequestHeader.AcceptLanguage, "en-US,en;q=0.5");
    req.Headers.Add("cookie", "analytics_id=595127c20cdfe6.52043028595127c20ce022.71834842; PHPSESSID=tbbo7npldsv26n2q7pg2728k77; D_IID=3E4FEA7F-9794-34EE-99F8-87EEA3DF0689; D_UID=5F374D94-270D-3653-8C54-9A46F381EAE2; D_ZID=505BB8EF-5A2D-3CBD-87D8-FABAD5014776; D_ZUID=BB0C9EF2-0E7B-383E-A03A-A3E92CC8051A; D_HID=9642D775-D860-3F04-8720-73E5339042BA; D_SID=63.138.127.22:6Ci6jv2Xv+yum3m9lNfnyRcAylne67YfnS/u8goKrxQ");
    req.Headers.Add("DNT", "1");
    req.Headers.Add("Upgrade-Insecure-Requests", "1");
    HttpWebResponse res = null;
    try
    {
        res = (HttpWebResponse)req.GetResponse();
    }
    catch (WebException webex)
    {
        res = (HttpWebResponse)webex.Response;
    }

    string html = new StreamReader(res.GetResponseStream()).ReadToEnd();
    return html;
}

如果沒有自定義標頭,則該頁面上會包含bot保護,該保護會發送416響應並進行重定向。 如果您在重定向頁面中閱讀了html,則表明該站點已將您檢測為機器人。

暫無
暫無

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

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