繁体   English   中英

使用C#在HTML文档中抓取JavaScript动态生成的数据

[英]Scraping data dynamically generated by JavaScript in html document using C#

如何使用C#在HTML文档中抓取JavaScript动态生成的数据?

使用C#库中的WebRequestHttpWebResponse ,我可以将整个html源代码作为字符串获取,但是困难在于我想要的数据未包含在源代码中。 数据是由JavaScript动态生成的。

另一方面,如果我想要的数据已经在源代码中,那么我可以使用正则表达式轻松获得它们。

我已经下载了HtmlAgilityPack ,但是我不知道它是否可以处理JavaScript动态生成项目的情况...

非常感谢你!

当您发出WebRequest时,是在要求服务器为您提供页面文件,该文件的内容尚未由网络浏览器解析/执行,因此它上的javascript尚未执行任何操作。

如果要查看浏览器解析后的页面外观,则需要使用一种工具来执行页面上的JavaScript。 您拥有的一种选择是使用内置的.net Web浏览器控件: http : //msdn.microsoft.com/zh-cn/library/aa752040(v=vs.85).aspx

Web浏览器控件可以导航到并加载页面,然后您可以查询页面上的JavaScript对其进行了更改的DOM。

编辑(示例):

Uri uri = new Uri("http://www.somewebsite.com/somepage.htm");

webBrowserControl.AllowNavigation = true;
// optional but I use this because it stops javascript errors breaking your scraper
webBrowserControl.ScriptErrorsSuppressed = true;
// you want to start scraping after the document is finished loading so do it in the function you pass to this handler
webBrowserControl.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(webBrowserControl_DocumentCompleted);
webBrowserControl.Navigate(uri);

private void webBrowserControl_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    HtmlElementCollection divs = webBrowserControl.Document.GetElementsByTagName("div");

    foreach (HtmlElement div in divs)
    {
        //do something
    }
}

您可以看看Selenium之类的工具来抓取具有Javascript的页面。

http://www.andykelk.net/tech/headless-browser-testing-with-phantomjs-selenium-webdriver-c-nunit-and-mono

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM