C#使用CefSharp控件实现爬虫

以下是详细讲解“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技术站

(0)
上一篇 2023年6月7日
下一篇 2023年6月7日

相关文章

  • 详解C#如何实现树形图列表

    下面是详解“详解C#如何实现树形图列表”的完整攻略。 1. 准备工作 在实现树形图列表之前,需要确保已经有一个能够与数据库交互的C#工程并能够成功地从数据库中获取数据。此外,我们还需要一个能够在前端界面展示数据结构的控件,常用的控件包括TreeView和DataGrid。 2. 数据库中存储数据结构 在数据库中,我们可以使用关系型、非关系型或基于图的数据库来…

    C# 2023年6月6日
    00
  • 详解.net mvc session失效问题

    关于”详解.net mvc session失效问题”,以下是一些攻略建议: 1. 理解Session失效 Session是ASP.NET MVC应用程序中一种存储数据的机制,它是基于Cookie实现的,因此只要客户端浏览器中的Cookie被操作,Session就会失效。此外,Session还有一些其他的因素会导致其失效。因此,当用户在使用应用程序时,可能会遇…

    C# 2023年5月31日
    00
  • C#记一次http协议multipart/form-data的boundary问题

    下面是“C#记一次http协议multipart/form-data的boundary问题”的完整攻略。 1. 问题背景 在使用 C# 发送 HTTP 请求时,如果请求体采用 multipart/form-data 格式,则需要在请求头和请求体中添加对应 “Content-Type” 和 “Boundary”。其中 “Boundary” 是分割每个 form…

    C# 2023年5月15日
    00
  • C#中执行批处理文件(*.bat)的方法代码

    执行批处理文件是指在C#程序中通过代码来执行批处理文件(*.bat),实现对其他程序或系统命令的控制。下面是执行批处理文件的完整攻略: 1. 利用Process类来执行批处理文件 在C#中,可以使用Process类来启动一个进程并执行批处理文件。Process类提供了Start方法用于启动一个程序,该方法可以接受一个ProcessStartInfo对象作为参…

    C# 2023年5月31日
    00
  • 快速了解c# 常量

    下面是“快速了解c#常量”的完整攻略。 1. 什么是C#常量 C#中的常量,也称为不变量,它是指程序运行过程中不会发生改变的固定值。常量在定义后就不允许改变,因此可以提高代码的安全性和稳定性。在C#中,我们可以通过使用const和readonly关键字来定义常量。 2. 使用const关键字定义常量 const关键字用于定义在编译时确定的常量。定义常量时,必…

    C# 2023年6月7日
    00
  • 深入理解C#序列化与反序列化的详解

    深入理解C#序列化与反序列化的详解 本文将详细介绍C#中的序列化和反序列化概念、原理和常见用法,帮助读者全面了解这一重要的语言特性。 什么是序列化和反序列化? 序列化(Serialization)是指将对象转换成二进制流(byte array),以便能够在网络上传输、存储到文件或数据库等场合使用。反序列化(Deserialization)则是将二进制流还原为…

    C# 2023年6月7日
    00
  • C#深浅拷贝的深入解析

    C#深浅拷贝的深入解析 拷贝是编程中的常见操作,其中深浅拷贝是我们需要重点关注的。本文将介绍深浅拷贝的概念和实现方法,让初学者掌握如何正确实现深浅拷贝。 概念 深浅拷贝是针对引用类型而言的。 浅拷贝:将引用类型的变量复制一份,但是仍然是复制的引用,即两个引用变量还是指向同一个对象。 深拷贝:将引用类型的变量复制一份,并且将其中的引用类型也复制一份,即两个引用…

    C# 2023年5月31日
    00
  • .NET Core实现企业微信获取部门成员

    .NET Core实现企业微信获取部门成员攻略 企业微信是一款专为企业打造的即时通讯工具,可以方便地进行企业内部沟通和协作。在企业微信中,可以通过API获取部门成员信息。本攻略将介绍如何使用.NET Core实现企业微信获取部门成员的功能。 步骤 步骤1:创建企业微信应用 首先,需要在企业微信中创建一个应用。可以按照以下步骤创建一个新的企业微信应用: 登录企…

    C# 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部