首页 > 编程语言 >C#爬取动态网页上的信息:B站主页

C#爬取动态网页上的信息:B站主页

时间:2024-09-27 17:00:43浏览次数:8  
标签:string 主页 C# 爬取 HTML 文档 var div

目录

简介

动态内容网站使用 JavaScript 脚本动态检索和渲染数据,爬取信息时需要模拟浏览器行为,否则获取到的源码基本是空的。爬取步骤如下:

  • 使用 Selenium 获取渲染后的 HTML 文档
  • 使用 HtmlAgilityPack 解析 HTML 文档

新建项目,安装需要的库:

  • Selenium.WebDriver
  • HtmlAgilityPack

获取 HTML 文档

需要注意的主要是以下2点:

  • 设置浏览器启动参数:无头模式、禁用GPU加速、设置启动时窗口大小
  • 等待页面动态加载完成:等待5秒钟,设置一个合适的时间即可
private static string GetHtml(string url)
{
    ChromeOptions options = new ChromeOptions();
    // 不显示浏览器
    options.AddArgument("--headless");
    // GPU加速可能会导致Chrome出现黑屏及CPU占用率过高
    options.AddArgument("--nogpu");
    // 设置chrome启动时size大小
    options.AddArgument("--window-size=10,10");

    using (var driver = new ChromeDriver(options))
    {
        try
        {
            driver.Manage().Window.Minimize();
            driver.Navigate().GoToUrl(url);
            // 等待页面动态加载完成
            Thread.Sleep(5000);
            // 返回页面源码
            return driver.PageSource;
        }
        catch (NoSuchElementException)
        {
            Console.WriteLine("找不到该元素");
            return string.Empty;
        }
    }
}

解析 HTML 文档

这里以B站为例,爬取B站UP主主页上的视频信息,如视频的标题、链接、封面。
先定义一个类来保存信息:

class VideoInfo
{
    public string Title { get; set; }
    public string Href { get; set; }
    public string ImgUrl { get; set; }
}

定义解析函数,返回视频信息列表:

private static List<VideoInfo> GetVideoInfos(string url)
{
    List<VideoInfo> videoInfos = new List<VideoInfo>();

    // 加载文档
    var html = GetHtml(url);
    var htmlDoc = new HtmlDocument();
    htmlDoc.LoadHtml(html);

    // 解析文档,先定位到视频列表标签
    var xpath = "/html/body/div[2]/div[4]/div/div/div[1]/div[2]/div/div";
    var htmlNodes = htmlDoc.DocumentNode.SelectNodes(xpath);

    // 循环解析它的子节点视频信息
    foreach (var node in htmlNodes)
    {
        var titleNode = node.SelectSingleNode("a[2]");
        var imgNode = node.SelectSingleNode("a[1]/div[1]/picture/source[1]");

        var title = titleNode.InnerText;
        var href = titleNode.Attributes["href"].Value.Trim('/');
        var imgUrl = imgNode.Attributes["srcset"].Value.Split('@')[0].Trim('/');

        videoInfos.Add(new VideoInfo
        {
            Title = title,
            Href = href,
            ImgUrl = imgUrl
        });
    }
    return videoInfos;
}

视频列表标签的 XPath 路径是通过浏览器调试工具,在指定标签上右键 复制完整的XPath 得到:
image

分析代码中的 node 节点时,html文本格式可能很乱,可以通过在线 HTML 代码格式化 工具格式后再进行分析。

测试

以B站UP主 星瞳_Official 为例,爬取视频信息:

static void Main(string[] args)
{
    var url = @"https://space.bilibili.com/401315430";
    var videoInfos = GetVideoInfos(url);
    foreach (var videoInfo in videoInfos)
    {
        Console.WriteLine(videoInfo.Title);
        Console.WriteLine(videoInfo.Href);
        Console.WriteLine(videoInfo.ImgUrl);
        Console.WriteLine();
    }
    Console.ReadKey();
}

结果如下:

等一下,好妹妹
www.bilibili.com/video/BV1uyxLeJEM9
i0.hdslb.com/bfs/archive/46a15065d1b6722a04696ffaaa2235287ceaa452.jpg

一口一个?你的超甜辣椒
www.bilibili.com/video/BV1AQsDeiEn1
i0.hdslb.com/bfs/archive/d93d47d67323ee284483e963ffed34fb9884cf61.jpg

这里只是演示爬取动态页面的方法,如果想获取B站UP主的视频信息,建议直接使用 API 请求数据

参考文章

标签:string,主页,C#,爬取,HTML,文档,var,div
From: https://www.cnblogs.com/timefiles/p/18436160

相关文章

  • 全球切削用涂层带锯条市场规划预测:未来六年CAGR为3.1%
    本文深入分析了切削用涂层带锯条市场的发展趋势、投资机会与挑战。通过对行业增长点、风险评估及未来展望的探讨,结合恒州诚思研究的数据洞察,为投资者提供了宝贵的信息和策略建议。一、引言切削用涂层带锯条作为现代制造业中不可或缺的工具之一,其性能直接影响到加工效率和产品质......
  • 【免费领51CTO博客定制咖啡杯】智能体-复古女装购物侠开发体验,追寻经典的时尚之选
    近各个大厂都在搞AI智能体,我不允许我得「博主宝贝儿们」没参加过!高举拳头,跟我一起宣誓!拿下百度文心智能体AI大师工坊,成为头号玩家!在活动期间内,完成任一赛题智能体开发,并提交智能体信息,通过审核即可领取51CTO博客周边一份!创建过程中如果遇到问题,可随时添加小助手沟通,回复暗号「AI大......
  • 【免费领51CTO博客定制咖啡杯】agent智能体开发流程
    1、激励策略的设计在“自我激励心灵大师”的开发过程中,设计有效的激励策略是关键。智能体通过分析用户的目标和情绪状态,提供定制化的建议。例如,对于需要提高效率的用户,智能体提供时间管理和目标设定的建议。2、用户情绪挑战用户在实际使用过程中会遇到各种情绪挑战,如焦虑或挫败感。......
  • NSSCTF [HUBUCTF 2022 新生赛]simple_RE(变种base64编码)
    文件无壳拖入IDA中shift+F12查看可疑字符串发现两串字符串一看这两个等于号就猜测是base64编码进入主函数看看这段代码是一个简单的C语言程序,主要功能是接受用户输入的字符串作为“flag”,然后通过对输入的字符串进行一些处理和比较来验证是否输入了正确的“flag”。......
  • AE2023下载,最新Adobe After Effects 2023 (AE2023) 一键安装无需破解
    AdobeAfterEffects,是Adobe公司开发的一款用来进行图形视频处理软件,主要适用于设计行业和视频特技行业,电视台、动画制作公司、个人后期制作工作室以及多媒体工作室也都会使用此款软件;AdobeAfterEffects可以帮助用户进行高效且精确地创建无数种引人注目的动态图形和震撼人心......
  • 【免费领51CTO博客定制咖啡杯】“潮流运动鞋探宝小助手”智能体制作体会
    在开发“潮流运动鞋探宝小助手”智能体的过程中,我充分感受到了创新与挑战的魅力。借助百度智能体这个强大的平台,为我们的开发工作提供了坚实的技术支持。利用其先进的自然语言处理能力和数据分析功能,我们能够更好地理解用户的需求,为他们提供更精准的潮流运动鞋推荐。首先,深入的市......
  • 如何同时使用多个Craigslist账户而不被封禁?
    Craigslist作为美国最受欢迎的在线分类广告网站之一,无论是商务广告、招聘还是资讯都可以在上面进行。每月吸引约250万次访问,是扩大在线影响力的绝佳选择。尽管Craigslist允许创建多个账户,但在发布广告时存在一些限制。例如,你不能在48小时内在同一类别和城市发布相同的广告两次......
  • 给Excel 添加正则表达式regexp()函数
    WPS推出了正则表达式函数regex家族,非常好用,必须给其点赞。听说微软在最新版本的Office也要推出,但老版本Office用户就不能使用这个函数,好在用VBA可以自定义一个函数也可以实现的,此函数不仅将三种模式融合到了同一个函数中,同时还支持数组、单元格、文本等多种数据处理'**************......
  • 广州浮点浩辰CAD软件许可优化实施成功案例
    浮动版浩辰CAD许可证优化、降本增效实施行业:建筑设计、工程施工实施软件:浩辰CAD一、背景概述1.项目背景浩辰CAD是一款广泛应用于建筑设计、工程施工等领域的专业设计软件,拥有强大的绘图和设计功能。某建筑设计企业在项目扩展和团队规模扩大过程中,发现浩辰CAD软件的许可证数量无法......
  • pbootcms判断有无多图,无多图显示缩略图
    在PbootCMS中,你可以使用模板标签来进行条件判断和循环。下面是一个完整的示例,展示了如何根据内容是否包含多图来分别显示不同的内容:{pboot:if({content:ispics}==1)}<ul>{pboot:picsid={content:id}num=5}<li><imgsrc="[pics:src]"alt="[pics:......