এইচটিএমএল অ্যাগিলিটি প্যাকটি কীভাবে ব্যবহার করবেন


629

আমি কীভাবে এইচটিএমএল এগ্রিলিটি প্যাকটি ব্যবহার করব ?

আমার এক্সএইচটিএমএল ডকুমেন্টটি সম্পূর্ণ বৈধ নয়। এজন্যই আমি এটি ব্যবহার করতে চেয়েছিলাম। আমি কীভাবে এটি আমার প্রকল্পে ব্যবহার করব? আমার প্রকল্পটি সি # তে রয়েছে।


79
এই প্রশ্নটি আমার পক্ষে খুব সহায়ক ছিল।
BigJoe714

26
পার্শ্ব দ্রষ্টব্য: নিউজিট পরিচালনা করে এমন একটি ভিজ্যুয়াল স্টুডিও সহ, আপনি এখন "রেফারেন্সগুলি" রাইট-ক্লিক করতে পারেন এবং "নিউগেট প্যাকেজগুলি পরিচালনা করুন ..." চয়ন করতে পারেন, "এইচটিএমএলএজিলিটিপ্যাক" অনুসন্ধান করুন এবং "ইনস্টল করুন" এ ক্লিক করুন। তারপরে একটি ব্যবহার / আমদানি বিবৃতি দিয়ে কোডটি সরাসরি খেলতে পারাও।
পৃষ্ঠপোষক

@ পেট্রিজে উপরের মন্তব্য সম্পর্কে: আমি জানতে পেরেছিলাম যে প্রথম যখন এনএনএসএসএন-এর মাধ্যমে এসএনএন থেকে প্রকল্পটি আনার সময় আমার এইচটিএমএলএজিলিটিপ্যাকটি আমার রেফারেন্সটি সরিয়ে ফেলতে হবে এবং তারপরে পুনরায় যুক্ত করতে হবে।
অ্যান্ড্রু কুনস

14
এইচটিএমএলজিটিপ্যাকের দিকে নজর দেওয়া যে কোনও ব্যক্তির সিএসকিউয়ারি বিবেচনা করা উচিত, এটি আমার অভিজ্ঞতা থেকে অনেক আধুনিক ইন্টারফেস সহ একটি আরও নতুন লাইব্রেরি। উদাহরণস্বরূপ, প্রথম উত্তর থেকে পুরো কোডটি সিএসকিউয়ারি হিসাবে সংক্ষিপ্ত করা যেতে পারে var body = CQ.CreateFromFile(filePath)["body"]
বেনিয়ামিন গ্রুইনবাউম

2
@ বেনজামিন গ্রুয়েনবাউম: আপনার সিএসকিউয়ের পরামর্শের জন্য থাম্বস আপ - ব্যবহারের পক্ষে খুব সহজ কয়েক মিনিটের মধ্যে সেটআপ।
নিওলিস্ক

উত্তর:


358

প্রথমে আপনার প্রকল্পে এইচটিএমএলজিটিপ্যাক নুগেট প্যাকেজটি ইনস্টল করুন ।

তারপরে, উদাহরণ হিসাবে:

HtmlAgilityPack.HtmlDocument htmlDoc = new HtmlAgilityPack.HtmlDocument();

// There are various options, set as needed
htmlDoc.OptionFixNestedTags=true;

// filePath is a path to a file containing the html
htmlDoc.Load(filePath);

// Use:  htmlDoc.LoadHtml(xmlString);  to load from a string (was htmlDoc.LoadXML(xmlString)

// ParseErrors is an ArrayList containing any errors from the Load statement
if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)
{
    // Handle any parse errors as required

}
else
{

    if (htmlDoc.DocumentNode != null)
    {
        HtmlAgilityPack.HtmlNode bodyNode = htmlDoc.DocumentNode.SelectSingleNode("//body");

        if (bodyNode != null)
        {
            // Do something with bodyNode
        }
    }
}

(এনবি: এই কোডটি কেবল এবং কেবলমাত্র সেরা / একমাত্র পদ্ধতিরই উদাহরণ নয় it এটি নিজের প্রয়োগে অন্ধভাবে ব্যবহার করবেন না))

HtmlDocument.Load()পদ্ধতি একটি প্রবাহ যা .NET Framework অন্যান্য প্রবাহ ওরিয়েন্টেড শ্রেণীর সাথে সংহত করতে খুবই দরকারী গ্রহণ করে। যদিও HtmlEntity.DeEntitize()HTML সত্ত্বা সঠিকভাবে প্রক্রিয়াকরণের জন্য আরেকটি দরকারী পদ্ধতি। (ধন্যবাদ ম্যাথিউ)

HtmlDocumentএবং HtmlNode আপনি সর্বাধিক ব্যবহার করবেন এমন ক্লাসগুলি। এক্সএমএল পার্সারের অনুরূপ এটি সিলেক্টসনলড এবং সিলেক্ট নোড পদ্ধতিগুলি সরবরাহ করে যা এক্সপথ এক্সপ্রেশন গ্রহণ করে।

HtmlDocument.Option?????? বুলিয়ান বৈশিষ্ট্যগুলিতে মনোযোগ দিন । এইগুলি কীভাবে Loadএবং LoadXMLপদ্ধতিগুলি আপনার এইচটিএমএল / এক্সএইচটিএমএল প্রক্রিয়া করবে তা নিয়ন্ত্রণ করে।

এইচটিএমএলসিটিপিলিপ্যাক.চএম নামে একটি সংকলিত সহায়তা ফাইলও রয়েছে যা প্রতিটি বিষয়ের জন্য একটি সম্পূর্ণ রেফারেন্স রাখে। এটি সাধারণত সমাধানের বেস ফোল্ডারে থাকে।


11
আরও মনে রাখবেন যে লোড একটি স্ট্রিম প্যারামিটার গ্রহণ করে, যা অনেক পরিস্থিতিতে সুবিধাজনক। আমি এটি একটি এইচটিটিপি স্ট্রিমের জন্য ব্যবহার করেছি (ওয়েবরেসপনস.গেটরেস্পোনস স্ট্রিম)। সচেতন হওয়ার জন্য আরেকটি ভাল পদ্ধতি হ'ল এইচটিএমএলটিটি.ডি.এন্টিটিটাইজ (এইচটিএমএল অ্যাজিলিটি প্যাকের অংশ)। কিছু ক্ষেত্রে স্বতন্ত্রভাবে প্রক্রিয়াজাতকরণের জন্য এটি প্রয়োজন।
ম্যাথু ফ্ল্যাশেন

1
দ্রষ্টব্য: এইচটিএমএল অ্যাগিলিটি প্যাকের সর্বশেষ বিটাতে (১.৪.০ বিটা ২ অক্টোবর ২০০৯ প্রকাশিত) স্যান্ডক্যাসল, ডকপ্রোজেক্ট এবং ভিজ্যুয়াল স্টুডিও ২০০ 2008 এসডিকে নির্ভরতার কারণে সহায়তা ফাইলটি আলাদা ডাউনলোডে সরানো হয়েছে download
rtpHarry

SelectSingleNode() মনে হচ্ছে কিছুক্ষণ আগে সরানো হয়েছে
ক্রিস এস

3
না, সিলেক্টসিংলনড এবং সিলেক্টনোডগুলি অবশ্যই আছে। আমি এটা একটু আকর্ষণীয় এটি htmlDoc.ParseErrors.Count (হওয়া উচিত) খুঁজে .Count না
মাইক মধ্যে Blandford

1
@ মাইকব্ল্যান্ডফোর্ড // আংশিক হ্যাঁ। এটি HtmlAgailityPack এর পিসিএল সংস্করণে (শুরু থেকে অস্তিত্ব নেই) সরিয়ে ফেলা বলে মনে হচ্ছে। nuget.org/packages/HtmlAgilityPack-PCL
জুন হংক

166

এটি আপনার কোনও উপকারে আসবে কিনা আমি জানি না, তবে আমি বেশ কয়েকটি নিবন্ধ লিখেছি যা মূলগুলি উপস্থাপন করে।

পরের নিবন্ধটি 95% সম্পূর্ণ, আমাকে কেবল আমার কোডটির শেষ কয়েকটি অংশের ব্যাখ্যা লিখতে হবে। আপনি যদি আগ্রহী হন তবে আমি এটি প্রকাশ করার পরে এখানে পোস্ট করার চেষ্টা করব।



3
সম্প্রতি কোড প্রকল্পে এটি এইচটিএমএলজিটিপ্যাকের একটি খুব ভাল নিবন্ধ প্রকাশিত হয়েছে। আপনি এটি এখানে
ভিক্টর সিগলার

64

এইচটিএমএলএগিলিটিপ্যাক এক্সপথ সিনট্যাক্স ব্যবহার করে এবং অনেকের যুক্তি যদিও এটি খারাপভাবে নথিভুক্ত করা হয়েছে, তবে এই এক্সপথ ডকুমেন্টেশনের সাহায্য নিয়ে এটি ব্যবহার করতে আমার কোনও সমস্যা হয়নি: https://www.w3schools.com/xml/xpath_syntax.asp

পার্স করা

<h2>
  <a href="">Jack</a>
</h2>
<ul>
  <li class="tel">
    <a href="">81 75 53 60</a>
  </li>
</ul>
<h2>
  <a href="">Roy</a>
</h2>
<ul>
  <li class="tel">
    <a href="">44 52 16 87</a>
  </li>
</ul>

আমি এটা করেছি:

string url = "http://website.com";
var Webget = new HtmlWeb();
var doc = Webget.Load(url);
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//h2//a"))
{
  names.Add(node.ChildNodes[0].InnerHtml);
}
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//li[@class='tel']//a"))
{
  phones.Add(node.ChildNodes[0].InnerHtml);
}

সম্পূর্ণ সত্য। এটি পুরোপুরি XPathস্ট্যান্ডার্ডের উপর নির্ভরশীল । সবার প্রথমে সেই স্ট্যান্ডার্ডটি শিখতে হবে এবং তার পরে সবকিছু সহজ হবে।
ফাইন্ডআউট_কিউরান

আপনার সরবরাহিত লিঙ্কটি আর উপলভ্য নয়। এটি সম্ভবত নতুন: w3schools.com/xsl/xpath_syntax.asp
পাইট্রেইক

এছাড়াও ডকুমেন্টনোড অবজেক্টে কোনও সিলেকনড () ফাংশন দেখতে পাচ্ছি না। নামকরণ করা হয়েছে কি?
পাইওট্রিক

আপনি কোন সংস্করণ ব্যবহার করছেন এবং কোথা থেকে ডাউনলোড করেছেন? Htmlagilitypack.codeplex.com/SourceControl/latest#Release/1_4_0/… অনুসারে এইচটিএমএল নোড শ্রেণিতে একটি নির্বাচন নোড পদ্ধতি থাকতে হবে।
কেন্ট মুন্তে ক্যাস্পারসেন

লিঙ্কটি উপলভ্য নয়, নতুন লিঙ্ক: www.w3schools.com/xML/xpath_syntax.asp
টায়ারমোস

6

প্রধান HTMLAgilityPack সম্পর্কিত কোড নিম্নরূপ

using System;
using System.Net;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;
using System.Text.RegularExpressions;
using HtmlAgilityPack;

namespace GetMetaData
{
    /// <summary>
    /// Summary description for MetaDataWebService
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
    [System.Web.Script.Services.ScriptService]
    public class MetaDataWebService: System.Web.Services.WebService
    {
        [WebMethod]
        [ScriptMethod(UseHttpGet = false)]
        public MetaData GetMetaData(string url)
        {
            MetaData objMetaData = new MetaData();

            //Get Title
            WebClient client = new WebClient();
            string sourceUrl = client.DownloadString(url);

            objMetaData.PageTitle = Regex.Match(sourceUrl, @
            "\<title\b[^>]*\>\s*(?<Title>[\s\S]*?)\</title\>", RegexOptions.IgnoreCase).Groups["Title"].Value;

            //Method to get Meta Tags
            objMetaData.MetaDescription = GetMetaDescription(url);
            return objMetaData;
        }

        private string GetMetaDescription(string url)
        {
            string description = string.Empty;

            //Get Meta Tags
            var webGet = new HtmlWeb();
            var document = webGet.Load(url);
            var metaTags = document.DocumentNode.SelectNodes("//meta");

            if (metaTags != null)
            {
                foreach(var tag in metaTags)
                {
                    if (tag.Attributes["name"] != null && tag.Attributes["content"] != null && tag.Attributes["name"].Value.ToLower() == "description")
                    {
                        description = tag.Attributes["content"].Value;
                    }
                }
            } 
            else
            {
                description = string.Empty;
            }
            return description;
        }
    }
}

4
ওয়েবসাইটটি আর উপলভ্য নয়
দিমিতর সোনেভ

5
    public string HtmlAgi(string url, string key)
    {

        var Webget = new HtmlWeb();
        var doc = Webget.Load(url);
        HtmlNode ourNode = doc.DocumentNode.SelectSingleNode(string.Format("//meta[@name='{0}']", key));

        if (ourNode != null)
        {


                return ourNode.GetAttributeValue("content", "");

        }
        else
        {
            return "not fount";
        }

    }

0

শুরু করা - এইচটিএমএল অ্যাগ্রিলিটি প্যাক

// From File
var doc = new HtmlDocument();
doc.Load(filePath);

// From String
var doc = new HtmlDocument();
doc.LoadHtml(html);

// From Web
var url = "http://html-agility-pack.net/";
var web = new HtmlWeb();
var doc = web.Load(url);

0

এটা চেষ্টা কর

string htmlBody = ParseHmlBody(dtViewDetails.Rows[0]["Body"].ToString());

private string ParseHmlBody(string html)
        {
            string body = string.Empty;
            try
            {
                var htmlDoc = new HtmlDocument();
                htmlDoc.LoadHtml(html);
                var htmlBody = htmlDoc.DocumentNode.SelectSingleNode("//body");
                body = htmlBody.OuterHtml;
            }
            catch (Exception ex)
            {

                dalPendingOrders.LogMessage("Error in ParseHmlBody" + ex.Message);
            }
            return body;
        }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.