[英]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.