最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#爬取動態(tài)網(wǎng)頁上信息得流程步驟

 更新時間:2024年10月21日 08:46:15   作者:小碼編匠  
動態(tài)內(nèi)容網(wǎng)站使用 JavaScript 腳本動態(tài)檢索和渲染數(shù)據(jù),爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的,這篇文章主要給大家詳細介紹了C#爬取動態(tài)網(wǎng)頁上信息得流程步驟,需要的朋友可以參考下

簡介

動態(tài)內(nèi)容網(wǎng)站使用 JavaScript 腳本動態(tài)檢索和渲染數(shù)據(jù),爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。

本文使用的爬取步驟如下:

  • 使用 Selenium 獲取渲染后的 HTML 文檔

  • 使用 HtmlAgilityPack 解析 HTML 文檔

新建項目,安裝需要的庫:

  • Selenium.WebDriver

  • HtmlAgilityPack

獲取 HTML 文檔

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

  • 設(shè)置瀏覽器啟動參數(shù):無頭模式、禁用GPU加速、設(shè)置啟動時窗口大小

  • 等待頁面動態(tài)加載完成:等待5秒鐘,設(shè)置一個合適的時間即可

private static string GetHtml(string url)
{
    ChromeOptions options = new ChromeOptions();
    // 不顯示瀏覽器
    options.AddArgument("--headless");
    // GPU加速可能會導致Chrome出現(xiàn)黑屏及CPU占用率過高
    options.AddArgument("--nogpu");
    // 設(shè)置chrome啟動時size大小
    options.AddArgument("--window-size=10,10");

    using (var driver = new ChromeDriver(options))
    {
        try
        {
            driver.Manage().Window.Minimize();
            driver.Navigate().GoToUrl(url);
            // 等待頁面動態(tài)加載完成
            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; }
}

定義解析函數(shù),返回視頻信息列表:

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);

    // 循環(huán)解析它的子節(jié)點視頻信息
    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 路徑是通過瀏覽器調(diào)試工具,在指定標簽上右鍵 復(fù)制完整的XPath 得到:

分析代碼中的 node 節(jié)點時,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();
}

結(jié)果如下:

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

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

這里只是演示爬取動態(tài)頁面的方法,如果想獲取B站UP主的視頻信息,建議直接使用 API 請求數(shù)據(jù)。

最后

以上就是C#爬取動態(tài)網(wǎng)頁上信息得流程步驟的詳細內(nèi)容,更多關(guān)于C#爬取動態(tài)網(wǎng)頁信息的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C#遍歷DataSet控件實例總結(jié)

    C#遍歷DataSet控件實例總結(jié)

    這篇文章主要介紹了C#遍歷DataSet控件的用法,以實例形式總結(jié)歸納了常見的遍歷方法,具有一定的參考學習價值,需要的朋友可以參考下
    2014-10-10
  • C#實現(xiàn)套接字發(fā)送接收數(shù)據(jù)

    C#實現(xiàn)套接字發(fā)送接收數(shù)據(jù)

    這篇文章主要為大家詳細介紹了C#實現(xiàn)套接字發(fā)送接收數(shù)據(jù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C#利用接口實現(xiàn)多語種選擇功能

    C#利用接口實現(xiàn)多語種選擇功能

    這篇文章主要為大家詳細介紹了如何C#利用接口實現(xiàn)多語種選擇功能,即多語言切換的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2024-02-02
  • 使用C#代碼重新排列PDF頁面的操作代碼

    使用C#代碼重新排列PDF頁面的操作代碼

    對于頁面順序混亂的 PDF 文檔,重新排列頁面可以避免讀者產(chǎn)生困惑,同時也能讓文檔結(jié)構(gòu)更加清晰有序,本文將演示如何使用 Spire.PDF for .NET 以編程方式重新排列現(xiàn)有 PDF 文檔中的頁面,需要的朋友可以參考下
    2025-12-12
  • C#調(diào)用外部程序的三種實現(xiàn)方式的示例

    C#調(diào)用外部程序的三種實現(xiàn)方式的示例

    在C#中調(diào)用外部程序通常有幾種方式,本文將介紹其中的三種主要方法:System.Diagnostics.Process?類、System.Shell類以及使用C#的System.Diagnostics.ProcessStartInfo類與System.Diagnostics.Process?類結(jié)合,感興趣的可以了解一下
    2025-05-05
  • C#生成本地配置文件的實現(xiàn)示例

    C#生成本地配置文件的實現(xiàn)示例

    本文將介紹如何使用C#語言生成本地配置文件,以便為應(yīng)用程序提供靈活的配置選項,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-01-01
  • 基于C#?實現(xiàn)劉謙春晚魔術(shù)(示例代碼)

    基于C#?實現(xiàn)劉謙春晚魔術(shù)(示例代碼)

    劉謙春晚魔術(shù)是一個讓人嘆為觀止的魔術(shù)表演,其中涉及到了數(shù)學、編程和創(chuàng)意的結(jié)合,看了春晚魔術(shù)的朋友們,是不是好奇春晚劉謙的魔術(shù)是怎么變的,本文分享C#?實現(xiàn)劉謙春晚魔術(shù)示例代碼,一起看看吧
    2024-02-02
  • C#中Clone一個對象的值到另一個對象案例

    C#中Clone一個對象的值到另一個對象案例

    這篇文章主要介紹了C#中Clone一個對象的值到另一個對象案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C#使用AForge實現(xiàn)調(diào)用攝像頭的示例詳解

    C#使用AForge實現(xiàn)調(diào)用攝像頭的示例詳解

    AForge是一個專門為開發(fā)者和研究者基于C#框架設(shè)計的,這個框架提供了不同的類庫和關(guān)于類庫的資源,本文為大家介紹了C#使用AForge實現(xiàn)調(diào)用攝像頭的相關(guān)教程,需要的可以了解下
    2023-11-11
  • 詳解如何通過C#/VB.NET調(diào)整PDF文檔頁邊距

    詳解如何通過C#/VB.NET調(diào)整PDF文檔頁邊距

    PDF邊距是頁面主要內(nèi)容區(qū)域和頁面邊緣之間的距離。與Word頁邊距不同,PDF文檔的頁邊距很難更改。本文將介紹如何在不更改頁面大小的情況下使用C#/VB.NET?代碼調(diào)整PDF文檔的頁邊距,需要的可以參考一下
    2023-04-04

最新評論

迭部县| 桦川县| 叶城县| 盐池县| 荆州市| 宜宾市| 桂平市| 新源县| 乌兰县| 富阳市| 遂宁市| 自治县| 息烽县| 隆昌县| 沈阳市| 靖宇县| 陈巴尔虎旗| 谢通门县| 绥宁县| 京山县| 泰和县| 毕节市| 深圳市| 乌拉特前旗| 纳雍县| 白河县| 三明市| 江陵县| 恩平市| 兴仁县| 犍为县| 高雄县| 济阳县| 耿马| 遂川县| 凉山| 古田县| 蕉岭县| 隆回县| 哈尔滨市| 招远市|