以下是详细讲解“C#使用CefSharp控件实现爬虫”的完整攻略:
1.什么是CefSharp
CefSharp是一种基于Chromium Embedded Framework(CEF)的.NET开源项目,通过将Chromium增加到应用程序中,可以在WinForms和WPF应用程序中嵌入HTML内容,运行JavaScript等。它极大地提高了.NET应用程序与Web的集成度。
2.CefSharp的安装
要在C#项目中使用CefSharp,你需要通过NuGet包管理器安装CefSharp。在Visual Studio中,你可以右键单击解决方案资源管理器中的项目名称,然后单击“Manage NuGet Packages...”打开NuGet包管理器。在搜索栏中输入“CefSharp”,选择最新版本并安装。
3.创建一个基本的CefSharp窗体
在程序中加入以下引用:
using CefSharp;
using CefSharp.WinForms;
然后在窗口中创建ChromiumWebBrowser控件:
private ChromiumWebBrowser chromeBrowser;
在Form的构造函数中初始化:
//InitializeComponent();
chromeBrowser = new ChromiumWebBrowser("http://www.google.com");
this.Controls.Add(chromeBrowser);
chromeBrowser.Dock = DockStyle.Fill;
运行程序,应该可以看到一个基本的CefSharp窗体,展示www.google.com。
4.爬取网站数据
现在,我们默认要爬取的网站是百度,下面是完整的爬虫代码:
var chromeBrowser = new ChromiumWebBrowser("http://www.baidu.com");
chromeBrowser.LoadingStateChanged += async (sender, args) =>
{
if (args.IsLoading == false)
{
var js = "document.getElementsByName('wd')[0].value='CefSharp';document.getElementById('su').click();";
var task = chromeBrowser.EvaluateScriptAsync(js);
await task.ContinueWith((t) =>
{
var response = t.Result;
var getRows = $"document.getElementsByClassName('result c-container new-pmd')";
var rows = chromeBrowser.EvaluateScriptAsync(getRows).Result;
foreach (var row in rows.Result.AsArray)
{
var title = row.Children[1].FirstChild.TextContent;
var url = row.Children[0].FirstChild.FirstChild.FirstChild.FirstChild.Attribute("href");
Console.WriteLine($"{title}\n\t{url}\n");
}
}, TaskScheduler.FromCurrentSynchronizationContext());
}
};
此代码创建了一个ChromiumWebBrowser实例,并加载百度首页。当该页面加载完毕后,代码会在搜索框中输入“CefSharp”,并点击搜索进行搜索。当搜索结果加载出来后,代码会遍历所有搜索结果,提取每个搜索结果的标题和网址并打印到控制台中。
以上就是“C#使用CefSharp控件实现爬虫”的完整攻略,希望能够对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用CefSharp控件实现爬虫 - Python技术站