尝试解析 HTML 时出错
Error when trying to parse HTML
我正在尝试解析网站https://www.crunchbase.com”。但是这个站点有一个 "Antibot protection"。而且我不知道如何从页面中获取任何 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
最后我尝试从页面获取所有 Urls:
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 Exception。
我假设您控制台 window 的上半部分是 Console.WriteLine(result) 的输出,这几乎显示了反机器人保护。无论您在浏览此站点时看到什么,它都不在这个 HTML 中,它的主体几乎是空的(当它被呈现时,它给出...什么都没有)。网页的实际内容可能由 HTML 内容引用的 Javascript 代码片段之一动态加载。另一方面,HtmlWeb 解析器(我认为来自 HTML Agility Pack)不会执行此 Javascript 代码,因此不会到达包含您要查找的元素的实际内容。换句话说,保护工作...
我正在尝试解析网站https://www.crunchbase.com”。但是这个站点有一个 "Antibot protection"。而且我不知道如何从页面中获取任何 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
最后我尝试从页面获取所有 Urls:
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 Exception。
我假设您控制台 window 的上半部分是 Console.WriteLine(result) 的输出,这几乎显示了反机器人保护。无论您在浏览此站点时看到什么,它都不在这个 HTML 中,它的主体几乎是空的(当它被呈现时,它给出...什么都没有)。网页的实际内容可能由 HTML 内容引用的 Javascript 代码片段之一动态加载。另一方面,HtmlWeb 解析器(我认为来自 HTML Agility Pack)不会执行此 Javascript 代码,因此不会到达包含您要查找的元素的实际内容。换句话说,保护工作...