我想从网站中提取数字数据,链接https://www.vndirect.com.vn/portal/bao-cao-ket-qua-kinh-doanh/vjc.shtml
以下黄色高亮显示图片中的数字:
我想提取以黄色突出显示的数字,所以我用C#编写了这段代码:
var html = @"https://www.vndirect.com.vn/portal/bao-cao-ket-qua-kinh-doanh/vjc.shtml";
HtmlWeb web = new HtmlWeb();
web.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
var htmlDoc = web.Load(html);
var node = htmlDoc.DocumentNode.SelectSingleNode("//*[@id='Listed_IncomeStatement_tableResult']/tbody/tr[1]/td[2]");
string strSo = node.OuterHtml;
Console.WriteLine(strSo);
但在strSo
我找不到黄色数字(19,749,872)。
你能告诉我在那个网站上提取数字的方法吗?
对不起,我写英文不太好。
答案 0 :(得分:0)
你遇到了一个问题,因为网站在加载页面后通过AJAX请求将数据加载到表中,但HtmlAgilityPack只能下载服务器直接发送给你的内容。
你可以通过查看通过HtmlWeb下载的源来找到它;实际上,Table标签中的DocumentNode HTML具有id" Listed_IncomeStatement_tableResult"在tbody中没有数据。
要避免此问题,您应该使用Selenium WebDriver。
此扩展程序允许使用某些浏览器行为(例如Firefox或Chrome),它将执行包含其中所有javascript的完整页面,然后在执行完页面后返回完整的页面源。 / p>
您可以在此处找到使用Chrome的驱动程序:Chrome Driver
导入所有库后,您只需执行以下代码:
//!Make sure to add the path to where you extracting the chromedriver.exe:
IWebDriver driver = new ChromeDriver(@"Path\To\Chromedriver");
driver.Navigate().GoToUrl("https://www.vndirect.com.vn/portal/bao-cao-ket-qua-kinh-doanh/vjc.shtml");
之后,您将能够直接从驱动程序对象访问该网页,如:
IWebElement myField = driver.FindElementBy.Id("tools"));
Chromedriver唯一的问题是它会打开一个浏览器来呈现所有内容。为了避免这种情况,您可以尝试使用其他驱动程序,例如PhantomJS,它会像Chrome一样运行,但不会打开任何窗口。
要了解如何在C#中使用 Selenium WebDriver 的更多示例,我建议您查看: