2017-04-16 125 views
2

我試圖解析網站「https://www.crunchbase.com」。但是這個網站有一個「Antibot保護」。而且我不知道如何從頁面獲取任何html元素。嘗試解析HTML時出錯

首先我做了一個「ssl」安全通道。

ServicePointManager.Expect100Continue = true; 

ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12; 

然後我用瀏覽器的用戶代理字符串做了一個HttpRequest。

var request = (HttpWebRequest)WebRequest.Create("https://www.crunchbase.com"); 

request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0"; 

request.Timeout = 10000; 

HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 

Console.WriteLine("Server status code: " + response.StatusCode); 

並用一個StreamWriter加載頁面:

using (StreamReader sr = new StreamReader(response.GetResponseStream())) 
{ 
    string result = sr.ReadToEnd(); 
    Console.WriteLine(result); 
} 

但是結果是: enter image description here

最後我試圖讓從頁面的所有URL:

HtmlWeb web = new HtmlWeb(); 

HtmlDocument document = web.Load(response.ResponseUri.AbsoluteUri); 

string respUri = response.ResponseUri.ToString(); 

HtmlNode[] nodes = document.DocumentNode.SelectNodes("//a").ToArray(); 

foreach (var item in nodes) 
{ 
    Console.WriteLine(item.InnerHtml); 
} 

但適用性會引發Unhadled異常。

回答

0

我假設你的控制檯窗口的上半部分是Console.WriteLine(結果)的輸出,並且這顯示了非常多的防護保護。無論你瀏覽本網站時看到什麼,它都不在這個HTML中,它有一個幾乎空的主體(當它被渲染時,它不會產生任何東西)。網頁的實際內容可能由HTML內容引用的Javascript代碼段之一動態加載。另一方面,HtmlWeb解析器(來自HTML敏捷包,我假設)不執行這個Javascript代碼,因此沒有達到包含您正在尋找的元素的實際內容。換句話說,保護工程...