亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用.net core 實現簡單爬蟲

發布時間:2021-07-28 17:17:26 來源:億速云 閱讀:202 作者:chen 欄目:大數據

本篇內容主要講解“怎么用.net core 實現簡單爬蟲”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用.net core 實現簡單爬蟲”吧!

一.介紹一個Http請求框架HttpCode.Core

  HttpCode.Core 源自于HttpCode(傳送門),不同的是 HttpCode.Core是基于.net standard 2.0實現的,移除了HttpCode與windows相耦合的api,且修改了異步實現,其余特性完全與HttpCode相同,大家 如果在使用中有什么問題可以查看在線文檔(傳送門)

HttpCode.Core完全開源,已傳到github,地址:https://github.com/stulzq/HttpCode.Core

為了方便大家使用,也傳到了nuget,地址:https://www.nuget.org/packages/HttpCode.Core/,在nuget中搜索 HttpCode.Core 或執行命令 Install-Package HttpCode.Core 就可以使用了。

具體的使用方法大家可以查閱在線文檔,或者查看github。

簡單、易用、高效 一個有態度的開源.Net Http請求框架!

二.分析抓取地址

首先使用谷歌瀏覽器的開發者工具,抓取博客園首頁獲取博文列表的地址:

 怎么用.net core 實現簡單爬蟲

從中我們可以分析出:

1. 請求地址  https://www.cnblogs.com/mvc/AggSite/PostList.aspx

2.請求方式  Post

3.請求數據

{

    "CategoryType":"SiteHome",

    "ParentCategoryId":0,

    "CategoryId":808,

    "PageIndex":3,

    "TotalPostCount":4000,

    "ItemListActionName":"PostList"

}

請求數據中,我們應當關心的是  PageIndex  代表的是 頁數,我們可通過變換這個參數的值來獲取不同頁面的數據。

 我們先使用HttpCode.Core來試一試獲取數據:

int pageIndex = 1;//頁數

HttpHelpers httpHelpers=new HttpHelpers();

HttpItems items=new HttpItems();

items.Url = "https://www.cnblogs.com/mvc/AggSite/PostList.aspx";//請求地址

items.Method = "Post";//請求方式 post

items.Postdata = "{\"CategoryType\":\"SiteHome\"," +

                    "\"ParentCategoryId\":0," +

                    "\"CategoryId\":808," +

                    "\"PageIndex\":"+ pageIndex + "," +

                    "\"TotalPostCount\":4000," +

                    "\"ItemListActionName\":\"PostList\"}";//請求數據

HttpResults hr = httpHelpers.GetHtml(items);

Console.WriteLine(hr.Html);

Console.ReadKey();

 運行截圖:

怎么用.net core 實現簡單爬蟲

可以看到我們已經成功獲取了數據,證明我們的分析是正確的。

三.解析返回的數據

剛剛我們測試接口返回的數據可以看出返回的是一堆html字符串。我們只想要博文的標題、作者、博文地址等等信息,我們不需要多余的html字符串,下面我們使用  HtmlAgilityPack 這個解析網頁的組件來獲得我們想要的數據。

關于這個組件的使用,博客園已經有不少介紹此組件的文檔,大家可以搜索查看,使用此組件需具備xpath相關知識,我就不在此詳細敘述了。

1.首先通過nuget安裝 HtmlAgilityPack  組件

  打開程序包控制臺

  執行命令 Install-Package HtmlAgilityPack -Version 1.5.2-beta6

2. 解析返回的數據

貼一下返回的部分數據:

<div class="post_item">

<div class="digg">

    <div class="diggit" onclick="DiggPost('yaoxiaowen',7470460,318439,1)"> 

    <span class="diggnum" id="digg_count_7470460">4</span>

    </div>

    <div class="clear"></div>

    <div id="digg_tip_7470460" class="digg_tip"></div>

</div>      

<div class="post_item_body">

    <h4><a class="titlelnk" href="http://www.cnblogs.com/yaoxiaowen/p/7470460.html" target="_blank">關于跨平臺的一些認識</a></h4>                   

    <p class="post_item_summary">

<a href="http://www.cnblogs.com/yaoxiaowen/" target="_blank"><img width="48" height="48" class="pfs" src="//pic.cnblogs.com/face/918357/20161122225949.png" alt=""/></a>    前段時間看了 周志明的那本 《深入理解java虛擬機》。對于 平臺無關性 問題,有了一些新的認識。所以特寫一篇博客來進行總結。 這是我的第一篇不針對具體技術,而只針對計算機系統和原理的博客文章,而這種話題,總是比較寬泛,而我本人的水平有限,所以我也只能泛泛的寫寫,思考的不對的地方,還望讀者不吝批評。 ...

    </p>              

    <div class="post_item_foot">                    

    <a href="http://www.cnblogs.com/yaoxiaowen/" class="lightblue">eleven_yw</a> 

    發布于 2017-09-03 22:12 

    <span class="article_comment"><a href="http://www.cnblogs.com/yaoxiaowen/p/7470460.html#commentform" title="2017-09-04 15:23" class="gray">

        評論(2)</a></span><span class="article_view"><a href="http://www.cnblogs.com/yaoxiaowen/p/7470460.html" class="gray">閱讀(210)</a></span></div>

</div>

<div class="clear"></div>

</div>

<div class="post_item">

<div class="digg">

    <div class="diggit" onclick="DiggPost('loseheart',7471197,375716,1)"> 

    <span class="diggnum" id="digg_count_7471197">0</span>

    </div>

    <div class="clear"></div>

    <div id="digg_tip_7471197" class="digg_tip"></div>

</div>      

<div class="post_item_body">

    <h4><a class="titlelnk" href="http://www.cnblogs.com/loseheart/p/7471197.html" target="_blank">2017年9月3日  實現網站的權限管理</a></h4>                   

    <p class="post_item_summary">

<a href="http://www.cnblogs.com/loseheart/" target="_blank"><img width="48" height="48" class="pfs" src="//pic.cnblogs.com/face/1224591/20170823222646.png" alt=""/></a>    現在各個企業管理網站對登錄的賬號都要進行權限管理,并且相當重要,每個賬號登錄進去所能看到的東西大不相同,下面是實現該功能的一個的一種方法。 需求: 權限:權限是使用者操作系統中功能模塊的能力,如“角色管理”模塊、“資費管 理”模塊和“賬單管理”模塊等。通過指定權限,可將使用者的操作限定在指定的 范圍 ...

    </p>              

    <div class="post_item_foot">                    

    <a href="http://www.cnblogs.com/loseheart/" class="lightblue">Loseheart</a> 

    發布于 2017-09-03 21:34 

    <span class="article_comment"><a href="http://www.cnblogs.com/loseheart/p/7471197.html#commentform" title="" class="gray">

        評論(0)</a></span><span class="article_view"><a href="http://www.cnblogs.com/loseheart/p/7471197.html" class="gray">閱讀(354)</a></span></div>

</div>

<div class="clear"></div>

</div>

 從中我們不難看出每一個數據是以class=post_item的div來進行區分的,我們想要的博文地址、標題等是在這個div里面的class=post_item_body的div里面,以此類推我們可以分析出:

  • 博文標題 <div class="post_item"> | <div class="post_item_body"> | h4 | a | Text

  • 博文地址 <div class="post_item"> | <div class="post_item_body"> | h4 | a | href

  • ..以此類推

因為HtmlAgilityPack是通過xpath來解析網頁的,所以現在我們要根據我們上面分析出的路徑來寫xpath,這里不明白xpath的可以去w3cschool學習一下,非常簡單。

 下面是我寫好的解析博文標題、地址和作者的代碼,抓取其他信息可以自己參考試一試:

//解析數據

HtmlDocument doc=new HtmlDocument();

//加載html

doc.LoadHtml(hr.Html);

//獲取 class=post_item_body 的div列表

HtmlNodeCollection itemNodes = doc.DocumentNode.SelectNodes("div[@class='post_item']/div[@class='post_item_body']");

//循環根據每個div解析我們想要的數據

foreach (var item in itemNodes)

{

    //獲取包含博文標題和地址的 a 標簽

    var nodeA = item.SelectSingleNode("h4/a");

    //獲取博文標題

    string title = nodeA.InnerText;

    //獲取博文地址 a標簽的 href 屬性

    string url = nodeA.GetAttributeValue("href", "");

    //獲取包含作者名字的 a 標簽

    var nodeAuthor = item.SelectSingleNode("div[@class='post_item_foot']/a[@class='lightblue']");

    string author = nodeAuthor.InnerText;

    Console.WriteLine($"標題:{title} | 作者:{author} | 地址:{url}");

}

運行截圖:

怎么用.net core 實現簡單爬蟲

四.循環抓取多個分頁

前面我們分析出請求參數中的 PageIndex  是頁數,分析單個頁面的代碼我們也寫出來來,那么我們可以通過循環遞增頁數,來達到抓取不同分頁數據的要求。

貼一下完整的代碼

int pageIndex = 1;//頁數

int maxPageIndex = 10;//最大頁數

HttpHelpers httpHelpers=new HttpHelpers();

for (int i = 0; i < maxPageIndex; i++)

{

    HttpItems items = new HttpItems();

    items.Url = "https://www.cnblogs.com/mvc/AggSite/PostList.aspx";//請求地址

    items.Method = "Post";//請求方式 post

    items.Postdata = "{\"CategoryType\":\"SiteHome\"," +

                        "\"ParentCategoryId\":0," +

                        "\"CategoryId\":808," +

                        "\"PageIndex\":" + (i+1) + "," + //因為i從0開始 所以此處我們要加1

                        "\"TotalPostCount\":4000," +

                        "\"ItemListActionName\":\"PostList\"}";//請求數據

    HttpResults hr = httpHelpers.GetHtml(items);

    //解析數據

    HtmlDocument doc = new HtmlDocument();

    //加載html

    doc.LoadHtml(hr.Html);

    //獲取 class=post_item_body 的div列表

    HtmlNodeCollection itemNodes = doc.DocumentNode.SelectNodes("div[@class='post_item']/div[@class='post_item_body']");

    Console.WriteLine($"第{i+1}頁數據:");

    //循環根據每個div解析我們想要的數據

    foreach (var item in itemNodes)

    {

        //獲取包含博文標題和地址的 a 標簽

        var nodeA = item.SelectSingleNode("h4/a");

        //獲取博文標題

        string title = nodeA.InnerText;

        //獲取博文地址 a標簽的 href 屬性

        string url = nodeA.GetAttributeValue("href", "");

        //獲取包含作者名字的 a 標簽

        var nodeAuthor = item.SelectSingleNode("div[@class='post_item_foot']/a[@class='lightblue']");

        string author = nodeAuthor.InnerText;

        //輸出數據

        Console.WriteLine($"標題:{title} | 作者:{author} | 地址:{url}");

    }

    //每抓取一頁數據 暫停三秒

    Thread.Sleep(3000);

}

Console.ReadKey();

運行截圖:

怎么用.net core 實現簡單爬蟲

一個簡單的.net core實現的簡單爬蟲就此完成!

到此,相信大家對“怎么用.net core 實現簡單爬蟲”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

八宿县| 商河县| 泰和县| 江门市| 洪湖市| 哈尔滨市| 新宾| 台中市| 秭归县| 丹凤县| 南丰县| 绥江县| 宜兰市| 双鸭山市| 许昌市| 和田市| 南木林县| 渑池县| 岐山县| 泾川县| 同心县| 英吉沙县| 天祝| 广宁县| 西畴县| 自贡市| 辉县市| 崇仁县| 疏附县| 安陆市| 依安县| 湄潭县| 莱西市| 理塘县| 长岭县| 嘉善县| 布拖县| 西藏| 大连市| 宜君县| 留坝县|