使用CefSharp动态爬取天天基金网历史基金数据——动态爬取(一)

  • 确保安装CefSharp软件包,相关安装步骤可以自行搜索
  • CefSharp相关信息可在网上搜索,在这里主要使用到它作为浏览器的功能
  • 思路:
    • 使用CefSharp打开相关网页,以http://fundf10.eastmoney.com/jjjz_004719.html为例,代码如下:
private void btn_Click(object sender, RoutedEventArgs e)
{
    web.Address = textBox.Text;
}
  • 相关网页打开之后可发现其历史基金数据在以下HTML代码中:
... ...
净值日期 单位净值 累计净值 日增长率 申购状态 赎回状态 分红送配
2020-01-23 1.1168 1.1168 0.71% 限制大额申购 开放赎回
2019-12-26 1.0519 1.0519 0.62% 开放申购 开放赎回
  • 在分析网页的HTML内容发现,其历史基金一次性获取并不完整,需要通过AJAX反复获取。通过需要使用CefSharp的JS异步操作技术,模拟网页按键操作即可实现自动翻页功能。部分代码如下:
script =
    $"var btns = pagebar.getElementsByTagName(\"label\");" +
    $"for(var i=0; i
  • 翻页完成后,通过读取当前页面数据即可获得相关历史基金数据。代码如下:
web.GetBrowser().MainFrame.GetSourceAsync().ContinueWith(x =>
{
    if (!x.IsFaulted)
    {
        Dispatcher?.Invoke(() => {
            _htmlDocument.LoadHtml(x.Result);
            var v = _htmlDocument.GetElementbyId("jztable");
            if (v != null)
            {
                if (v.SelectNodes("table").Count != 0)
                {
                    var table = v.SelectNodes("table");
                    if (table[0].SelectNodes("tbody").Count != 0)
                    {
                        var tr = table[0].SelectNodes("tbody")[0].SelectNodes("tr");
                        for(int trIdx=0; trIdx < tr.Count; trIdx++)
                        {
                            var td = tr[trIdx].SelectNodes("td");
                            win?.Dispatcher?.Invoke(() => {
                                for (int tdIdx = 0; tdIdx < td.Count; tdIdx++)
                                {
                                    var innerText = td[tdIdx].InnerText;
                                    if (innerText.Contains("\n"))
                                    {
                                        innerText = innerText.Substring(0, innerText.IndexOf('\n'));
                                    }
                                    win.textBox.Text += innerText + "\t";
                                }
                                win.textBox.Text += "\n";
                            });
                        }
                    }
                }
            }
        });
    }
});
  • 爬取网页数据效果如下:

使用CefSharp动态爬取天天基金网历史基金数据——动态爬取(一)_第1张图片

使用CefSharp动态爬取天天基金网历史基金数据——动态爬取(一)_第2张图片

 

 

你可能感兴趣的:(C#,WPF,CefSharp,动态网页爬虫)