尝试解析HTML

时间:2017-04-16 16:22:30

标签: c# html parsing ssl user-agent

我尝试解析网站“https://www.crunchbase.com”。但是这个网站有一个“抗体保护”。我不知道如何从页面中获取任何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

最后我试图从页面中获取所有网址:

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);
}

但是apllication会抛出Unhadled Exception。

1 个答案:

答案 0 :(得分:0)

我假设控制台窗口的上半部分是Console.WriteLine(结果)的输出,这显示了很多抗菌保护。无论你在浏览这个网站时看到什么,它都不在这个几乎是空的身体的HTML中(当渲染它时,它给......什么都没有)。网页的实际内容可能是由HTML内容引用的一个Javascript代码段动态加载的。另一方面,HtmlWeb解析器(来自HTML Agility Pack,我认为)不会执行此Javascript代码,因此无法访问包含您要查找的元素的实际内容。换句话说,保护工作......