آشنایی با HTML Agility Pack
سه شنبه 26 خرداد 1394در این مقاله آشنایی با کتابخانه HTML Agility Pack را به همراه یک مثال عملی توضیح خواهیم داد . از امکانات موجود در این کتابخانه میتوان به مشاهده جزئیات یک سایت اعم از لینکها ، تگ ها ، کلمات کلیدی و غیره اشاره کرد .
در ابتدا شما میباست این کتابخانه را با استفاده از Nuget به پروژه خود اضافه کنید . همچنین از طریق دستور زیر میتوانید این کتابخانه را در پروژه خود نصب کنید :
Install-Package HtmlAgilityPack
بعد از افزودن کتابخانه مورد نظر ، شما باید فضای نام مربوط را در قسمت دستورات صفحه قرار دهید :
using HtmlAgilityPack;
سپس در متد Load مربوط به فرم میباست دستور زیر را بنویسیم :
HtmlWeb web = new HtmlWeb(); HtmlDocument document = web.Load("http://www.barnamenevisan.org");
بعد از افزودن دو خط بالا ، ما محتوای مربوط به صفحه وارد شده را میتوانیم در اختیار داشته باشیم .
متد Load صفحه و ذخیر اطلاعات مربوط به آن :
ممکن است احتیاج باشد که چندین بار اطلاعات را از روی هارد سیستم بازخوانی کنیم ، برای بازخوانی این اطلاعات میبایست دستور زیر را بنویسیم :
HtmlDocument document2 = new HtmlDocument(); document2.Load(@"C:\Temp\sample.txt");
تگ های موجود در صفحه شامل لیست زیر میباشد :
<h2 style="float:right">خوش آمدید</h2><br /><br /> <p> نمایش اطلاعات سایت </p> <ul> <li><a href="GetMetaTags.aspx">دریافت تگ های META</a> این نرم افزار اطلاعات مربوط به سایتی خاص را از HTML صفحه دریافت میکند و نام و محتوای آنها را نمایش می دهد </li> <li><a href="GetAllLinks.aspx"> دریافت لینکها</a> نمایش لینکهای یک سایت</li> <li><a href="ModifyPage.aspx">شناسای صفحات وب</a>صفحات وب را دانلود میکند و سپس محتوای آنها را شناسایی می کند ، </li> </ul> <p> موفق باشید </p> <p style="padding-left: 20px"> <h3> <a href="http://barnamenevisan.org/">برنامه نویسان</a> </h3> </p>
همچنین تگهای مربوط به نمایش لینکهای سایت وارد شده در کنترل Textbox شامل زیر میباشد :
<h2> Get All Links...</h2> <p> This demo downloads the web page you specify and lists all of the hyperlinks on the page in a bulleted list. <p> <b>Enter a URL:</b> <asp:TextBox ID="txtUrl" runat="server" Columns="50">http://scottonwriting.net/sowblog/</asp:TextBox> <asp:RequiredFieldValidator ID="rfvURL" runat="server" ControlToValidate="txtUrl" ErrorMessage="[Required]" SetFocusOnError="True" Display="Dynamic"></asp:RequiredFieldValidator> <asp:RegularExpressionValidator ID="regexpUrl" runat="server" ErrorMessage="[Invalid]" ControlToValidate="txtUrl" Display="Dynamic" SetFocusOnError="True" ValidationExpression="http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"></asp:RegularExpressionValidator> <br /> <asp:Button ID="btnGetLinks" runat="server" Text="Get Links" onclick="btnGetLinks_Click" /> </p> <p> <asp:Label ID="lblSummary" runat="server"></asp:Label> </p> <asp:ListView ID="lvLinks" runat="server"> <LayoutTemplate> <ul> <asp:PlaceHolder runat="server" ID="itemPlaceholder" /> </ul> </LayoutTemplate> <ItemTemplate> <li> <%# Eval("Text") %> - <%# Eval("Url") %> </li> </ItemTemplate> <EmptyDataTemplate> <p>There were no links found on the web page...</p> </EmptyDataTemplate> </asp:ListView>
در رویداد کلیک دکمه "GetLinks" میباست دستورات زیر را قرار دهیم :
var webGet = new HtmlWeb(); var document = webGet.Load(txtUrl.Text); // Get <a> tags that have a href attribute and non-whitespace inner text var linksOnPage = from lnks in document.DocumentNode.Descendants() where lnks.Name == "a" && lnks.Attributes["href"] != null && lnks.InnerText.Trim().Length > 0 select new { Url = lnks.Attributes["href"].Value, Text = lnks.InnerText }; lblSummary.Text = string.Format("URL {0} loaded in {1:N0} milliseconds. {2:N0} links discovered...", webGet.ResponseUri.ToString(), webGet.RequestDuration, linksOnPage.Count()); lvLinks.DataSource = linksOnPage; lvLinks.DataBind();
تگ مربوط به صفحه دریافت تگهای META شامل زیر میباشد :
<b>Enter a URL:</b> <asp:TextBox ID="txtUrl" runat="server" Columns="50">http://scottonwriting.net/sowblog/</asp:TextBox> <asp:RequiredFieldValidator ID="rfvURL" runat="server" ControlToValidate="txtUrl" ErrorMessage="[Required]" SetFocusOnError="True" Display="Dynamic"></asp:RequiredFieldValidator> <asp:RegularExpressionValidator ID="regexpUrl" runat="server" ErrorMessage="[Invalid]" ControlToValidate="txtUrl" Display="Dynamic" SetFocusOnError="True" ValidationExpression="http(s)?://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)?"></asp:RegularExpressionValidator> <br /> <asp:Button ID="btnGetMetaTags" runat="server" Text="Get Meta Tags" onclick="btnGetMetaTags_Click" /> </p> <p> <asp:Label ID="lblOutput" runat="server" EnableViewState="false"></asp:Label> </p>
همچنین دستور مربوط به دریافت کلمات کلیدی نیز شامل زیر میباشد :
var output = new StringBuilder(); // Get the URL specified var webGet = new HtmlWeb(); var document = webGet.Load(txtUrl.Text); output.AppendFormat("<p>The web page at {0} was loaded in {1:N0} milliseconds...</p>", webGet.ResponseUri.ToString(), webGet.RequestDuration); // Get <meta> tags var metaTags = document.DocumentNode.SelectNodes("//meta"); var foundAppropriateMetaTag = false; if (metaTags != null) { output.Append("<ul>"); foreach (var tag in metaTags) { if (tag.Attributes["name"] != null && tag.Attributes["content"] != null) { foundAppropriateMetaTag = true; output.AppendFormat("<li><b>{0}</b> meta tag found with value: <b>{1}</b></li>", tag.Attributes["name"].Value, tag.Attributes["content"].Value); } } output.Append("</ul>"); } if (!foundAppropriateMetaTag) output.Append("<p><b>No meta tags found!!</b></p>"); lblOutput.Text = output.ToString();
- C#.net
- 4k بازدید
- 4 تشکر