آشنایی با 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 تشکر