欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

簡介

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

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

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

  • 使用 HtmlAgilityPack 解析 HTML 文檔

新建項(xiàng)目,安裝需要的庫:

  • Selenium.WebDriver

  • HtmlAgilityPack

獲取 HTML 文檔

需要注意的主要是以下2點(diǎn):

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

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

private static string GetHtml(string url)
{
    ChromeOptions options = new ChromeOptions();
    // 不顯示瀏覽器
    options.AddArgument("--headless");
    // GPU加速可能會導(dǎo)致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主主頁上的視頻信息,如視頻的標(biāo)題、鏈接、封面。

先定義一個類來保存信息:

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

    // 解析文檔,先定位到視頻列表標(biāo)簽
    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é)點(diǎn)視頻信息
    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;
}

視頻列表標(biāo)簽的 XPath 路徑是通過瀏覽器調(diào)試工具,在指定標(biāo)簽上右鍵 復(fù)制完整的XPath 得到:

分析代碼中的 node 節(jié)點(diǎn)時,html文本格式可能很亂,可以通過在線 HTML 代碼格式化 工具格式后再進(jìn)行分析。

測試

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

相關(guān)文章

  • C# Task Cancellation使用總結(jié)

    C# Task Cancellation使用總結(jié)

    本文主要介紹了在使用CancellationTokenSource取消任務(wù)時的行為,以及如何使用Task的ContinueWith方法來處理任務(wù)的延續(xù)
    2024-12-12
  • 把DLL文件打包進(jìn)EXE的操作技巧

    把DLL文件打包進(jìn)EXE的操作技巧

    用VS2005建立一個windows項(xiàng)目,取名test,之后把生成DLL文件打包進(jìn)EXE,接下來介紹詳細(xì)的操作技巧,感興趣的朋友可以了解下啊,或許對你有所幫助
    2013-02-02
  • C#中DataBindings用法實(shí)例分析

    C#中DataBindings用法實(shí)例分析

    這篇文章主要介紹了C#中DataBindings用法,結(jié)合實(shí)例形式詳細(xì)分析了DataBindings綁定數(shù)據(jù)源及刷新數(shù)據(jù)的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • .Net中的json操作類用法分析

    .Net中的json操作類用法分析

    這篇文章主要介紹了.Net中的json操作類用法分析,是非常實(shí)用的一個技巧,需要的朋友可以參考下
    2014-08-08
  • c#中文轉(zhuǎn)unicode字符示例分享

    c#中文轉(zhuǎn)unicode字符示例分享

    本文介紹了中文轉(zhuǎn)unicode字符的方法,還有UNICODE字符轉(zhuǎn)為中文的方法,大家參考使用吧
    2014-01-01
  • 利用C#與PLC通信實(shí)現(xiàn)設(shè)備遠(yuǎn)程控制與管理

    利用C#與PLC通信實(shí)現(xiàn)設(shè)備遠(yuǎn)程控制與管理

    PLC是工業(yè)自動化中用于控制機(jī)械設(shè)備、生產(chǎn)線等的核心設(shè)備,通過與PLC的通信,我們可以實(shí)現(xiàn)設(shè)備的遠(yuǎn)程監(jiān)控、數(shù)據(jù)采集等功能,C#作為一種現(xiàn)代化的編程語言,能夠非常方便地與PLC進(jìn)行通信,本文將介紹如何利用C#與PLC進(jìn)行通信,并實(shí)現(xiàn)設(shè)備的遠(yuǎn)程控制與管理
    2025-02-02
  • C# 圖片格式轉(zhuǎn)換的實(shí)例代碼

    C# 圖片格式轉(zhuǎn)換的實(shí)例代碼

    這篇文章主要介紹了C# 圖片格式轉(zhuǎn)換的實(shí)例代碼,文中講解非常詳細(xì),幫助大家更好的理解和學(xué)習(xí)c#,感興趣的朋友可以了解下
    2020-08-08
  • C# 泛型集合的自定義類型排序的實(shí)現(xiàn)

    C# 泛型集合的自定義類型排序的實(shí)現(xiàn)

    這篇文章主要介紹了C# 泛型集合的自定義類型排序的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • C#使用Redis的基本操作

    C#使用Redis的基本操作

    這篇文章主要介紹了C#使用Redis的基本操作,需要的朋友可以參考下
    2017-06-06
  • C#中使用Override和New關(guān)鍵字進(jìn)行版本控制

    C#中使用Override和New關(guān)鍵字進(jìn)行版本控制

    在?C#?中,override?和?new?關(guān)鍵字用于控制類之間的成員方法的隱藏和重寫,理解它們之間的差異和使用場景對于設(shè)計(jì)靈活且易于維護(hù)的代碼至關(guān)重要,在這篇博客中,我們將詳細(xì)探討這兩個關(guān)鍵字的用法,并通過示例來說明它們的實(shí)際應(yīng)用,需要的朋友可以參考下
    2024-10-10

最新評論