C# 使用AngleSharp 爬蟲圖片

AngleSharp 簡介

AngleSharp是基於.NET(C#)開發的專門解析HTML源碼的DLL組件。根據HTML的DOM結構操做HTML,整個DOM已傳輸到邏輯類結構中。這種結構能夠更好的操做DOM元素。html

AngleSharp還帶來了一些很是有用的擴展方法,它們跟jQuery和JavaScript中的用法相似。 使用命名空間AngleSharp能夠訪問Html,Css,Attr或Text等方法。 這些方法向給定的IHtmlCollection同樣在給定的IEnumerable <IElement>上運行。 目的很簡單:輕鬆修改給定的DOM元素。此插件最大的優點:支持輸出JavascriptLinq語法、IDClass選擇器、動態添加節點。前端

 AngleSharp是個開源項目, 主頁地址git

參考github

http://www.cnblogs.com/pandait/p/AngleSharp.html測試

http://www.javashuo.com/article/p-ctfjwxjo-eh.htmlspa

經過NuGet獲取AngleSharp

將AngleSharp整合到您的項目中最簡單的方法是使用NuGet。您能夠經過打開軟件包管理器控制檯(PM)並輸入如下語句來安裝AngleSharp:插件

Install-Package AngleSharp

您也能夠使用圖形庫包管理器(「管理解決方案的NuGet包」)。在官方的NuGet在線源中搜索「AngleSharp」將會找到這個庫。3d

操做DOM示例
//建立一個(可重用)解析器前端
 var parser = new HtmlParser();
//html DOM節點
var source = "<h1>Some example source</h1><p>This is a paragraph element";
//解析源文件
var document = parser.Parse(source);
//建立P標籤
var p = document.CreateElement("p");
p.TextContent = "This is another paragraph.";
//添加到DOM
document.Body.AppendChild(p);
//返回完整html
var html = document.DocumentElement.OuterHtml;
ViewData["html"] = html;

效果展現rest

更改標籤屬性

給<li> 標籤添加自定義屬性code

var parser = new HtmlParser();
 //爲如下源代碼生成HTML DOM
var document = parser.Parse("<ul><li>First element<li>Second element<li>third<li class=bla>Last");
//獲取全部li元素並將test屬性設置爲值測試
var elements = document.QuerySelectorAll("li").Attr("test", "test");
 //元素仍然包含全部li元素
ViewData["html"] = document.DocumentElement.OuterHtml;

效果展現

爬取豆瓣美女圖片

 新建個Belle類用於保存獲取的圖片信息

/// <summary>
/// 解析html
/// </summary>
public class Belle
{
        /// <summary>
        /// 標題
        /// </summary>
        public string Title { get; set; }
        /// <summary>
        /// 圖片地址
        /// </summary>
        public string ImageUrl { get; set; }
}

獲取html並解析

// 設置配置以支持文檔加載
var config = Configuration.Default.WithDefaultLoader();
// 豆瓣地址
var address = "https://www.dbmeinv.com/dbgroup/show.htm?cid=4";
// 請求豆辨網
var document =  BrowsingContext.New(config).OpenAsync(address);
// 根據class獲取html元素
var cells = document.Result.QuerySelectorAll(".panel-body li");
// We are only interested in the text - select it with LINQ
List<Belle> list = new List<Belle>();
foreach (var item in cells)
{
     var belle = new Belle
{ Title
= item.QuerySelector("img").GetAttribute("title"), ImageUrl= item.QuerySelector("img").GetAttribute("src") }; list.Add(belle);
}
ViewData[
"html"] = list;

效果以下

相關文章
相關標籤/搜索