加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用C#刮取html文档中JavaScript动态生成的数据

发布时间:2020-12-16 01:21:33 所属栏目:百科 来源:网络整理
导读:如何使用C#抓取html文档中 JavaScript动态生成的数据? 在C#库中使用WebRequest和HttpWebResponse,我能够将整个html源代码作为字符串获取,但难点在于我想要的数据不包含在源代码中;数据由JavaScript动态生成. 另一方面,如果我想要的数据已经在源代码中,那么
如何使用C#抓取html文档中 JavaScript动态生成的数据?

在C#库中使用WebRequest和HttpWebResponse,我能够将整个html源代码作为字符串获取,但难点在于我想要的数据不包含在源代码中;数据由JavaScript动态生成.

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

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

非常感谢你!

解决方法

当您创建WebRequest时,您要求服务器为您提供页面文件,此文件的内容尚未被Web浏览器解析/执行,因此其上的javascript尚未执行任何操作.

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

Web浏览器控件可以导航到并加载页面,然后您可以查询它的DOM,这些DOM将被页面上的JavaScript更改.

编辑(示例):

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
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读