Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 尝试分析HTML时出错_C#_Html_Parsing_Ssl_User Agent - Fatal编程技术网

C# 尝试分析HTML时出错

C# 尝试分析HTML时出错,c#,html,parsing,ssl,user-agent,C#,Html,Parsing,Ssl,User Agent,我正在尝试分析站点“”。但是这个网站有一个“反机器人保护”。我不知道如何从页面中获取任何html元素 首先,我创建了一个“ssl”安全通道 ServicePointManager.Expect100Continue = true; ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityPr

我正在尝试分析站点“”。但是这个网站有一个“反机器人保护”。我不知道如何从页面中获取任何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);
}
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);
}
但结果是:

最后,我尝试从页面获取所有URL:

using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
    string result = sr.ReadToEnd();
    Console.WriteLine(result);
}
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);
}

但是应用程序会抛出未处理的异常。

我假设控制台窗口的上部是console.WriteLine(result)的输出,这几乎显示了反机器人保护。无论你在浏览这个网站时看到什么,它都不是在这个HTML中,它的主体几乎是空的(当这个呈现出来时,它什么都没有)。网页的实际内容可能是由HTML内容引用的一个Javascript代码段动态加载的。另一方面,HtmlWeb解析器(我认为来自HtmlAgility Pack)不执行此Javascript代码,因此无法访问包含您正在查找的元素的实际内容。换句话说,保护工作