آشنایی با HTML Agility Pack

در این مقاله آشنایی با کتابخانه HTML Agility Pack را به همراه یک مثال عملی توضیح خواهیم داد . از امکانات موجود در این کتابخانه میتوان به مشاهده جزئیات یک سایت اعم از لینکها ، تگ ها ، کلمات کلیدی و غیره اشاره کرد .

آشنایی با 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- ./?%&amp;=]*)?"></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- ./?%&amp;=]*)?"></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();

 

فایل های ضمیمه