C# 用C语言实现Web抓取#

C# 用C语言实现Web抓取#,c#,.net,selenium,web-scraping,phantomjs,C#,.net,Selenium,Web Scraping,Phantomjs,我正试图从下面的url中删除: 我今天正在抓取攻击,如编号as 952,xxx所示 我用C写了下面的代码# 但要在.NET浏览器中加载代码需要花费很多时间,而且代码似乎要挂起很多时间。 任何解决方案都可以。HtmlAgilityPack具有一些查询html内容dom的强大功能。您只需使用WebClient向下拉html代码,然后使用HtmlAgilityPack解析它 在这种情况下,您甚至不需要无头浏览器。只需使用您语言中的任何库发出请求,并向此数据点发出GET请求: https://thre

我正试图从下面的url中删除:

我今天正在抓取攻击,如编号as 952,xxx所示

我用C写了下面的代码#

但要在.NET浏览器中加载代码需要花费很多时间,而且代码似乎要挂起很多时间。
任何解决方案都可以。

HtmlAgilityPack具有一些查询html内容dom的强大功能。您只需使用WebClient向下拉html代码,然后使用HtmlAgilityPack解析它

在这种情况下,您甚至不需要无头浏览器。只需使用您语言中的任何库发出请求,并向此数据点发出GET请求:

https://threatmap.checkpoint.com/ThreatPortal/rest/livemap/startup
这在撰写本文时给出了一个漂亮的JSON:

{“主要攻击国”:[“美国”、“否”、“TR”、“CA”、“DE”、“BA”、“CY”、“NL”、“FR”、“SG”],“主要攻击国”:[“IN”、“ID”、“ES”、“TW”、“VN”、“MX”、“美国”、“非盟”、“NG”、“否”],“今天的总体攻击”:1149415,“昨天的总体攻击”:6921731}

要检索当前的攻击数量,例如952、xxx,您可以使用以下定位策略:

由于AUT是基于JavaScript/Ajax的,您可能需要按如下方式诱导WebDriverWait:

IWebElement todayAttacksCount = new WebDriverWait(driver, TimeSpan.FromSeconds(3)).Until(ExpectedConditions.ElementExists(By.XPath("//div[@class='pinkBorder' and @id='AttacksCountContainer']//following-sibling::h3[1]//strong")));
Console.WriteLine(todayAttacksCount.GetAttribute("innerHTML"));

您需要等待完整的响应完成。您可以使用
Thread.Sleep
是否有其他方法,如api或json文件?您可以使用
Http客户端
nuget包。Htmlagility包提供客户端HTML内容。但这里我们需要服务器端HTML内容页面上的所有dom都是客户端。除非您有权访问服务器,否则无法访问站点上的任何服务器端数据。刮取另一个网站总是会拉取客户端代码。这是我需要的。但我可以问你一个问题吗?你是如何找到这个url的?我在Chrome的“网络面板”中打开了DevTools,加载了url并快速查看了网络请求,单击了一些请求并检查了响应中的内容。在所有通常没完没了的有角度的东西之后,是数据。这是学习你打算使用的网站的通常过程。非常感谢!!正如您所说,我尝试了url:?但在这里,我可以看到w3m而不是json或xml。尽管我可以在预览中看到数据,如“total reported(last 24小时)”。但是我怎样才能将其提取为json或xml格式。提前谢谢!!你需要研究你将要使用的每个网站,因为它们都是不同的!对于spamcop,您需要向找到的端点发送POST请求:
curl-d“action=graphdata&period=spamstats”https://www.spamcop.net/w3m
,它将返回带有数据的JSON。
string todayAttacksCount = driver.FindElement(By.XPath("//div[@class='pinkBorder' and @id='AttacksCountContainer']//following-sibling::h3[1]//strong")).GetAttribute("innerHTML");
IWebElement todayAttacksCount = new WebDriverWait(driver, TimeSpan.FromSeconds(3)).Until(ExpectedConditions.ElementExists(By.XPath("//div[@class='pinkBorder' and @id='AttacksCountContainer']//following-sibling::h3[1]//strong")));
Console.WriteLine(todayAttacksCount.GetAttribute("innerHTML"));