HTML चपलता पैक का उपयोग कैसे करें


629

मैं HTML चपलता पैक का उपयोग कैसे करूँ ?

मेरा XHTML दस्तावेज़ पूरी तरह से मान्य नहीं है। इसलिए मैं इसका इस्तेमाल करना चाहता था। मैं इसे अपने प्रोजेक्ट में कैसे उपयोग करूं? मेरा प्रोजेक्ट C # में है।


79
यह सवाल मेरे लिए बहुत मददगार था।
BigJoe714

26
साइड नोट: एक दृश्य स्टूडियो के साथ, जो NuGet को संभालता है, अब आप "संदर्भ" पर राइट-क्लिक कर सकते हैं और "NuGet Package प्रबंधित कर सकते हैं ...", "HtmlAgilityPack" खोजें और "इंस्टॉल करें" पर क्लिक करें। फिर कोड के साथ एक प्रयोग / आयात विवरण के साथ खेलने का अधिकार प्राप्त करें।
Patridge

@ दलित द्वारा उपर्युक्त टिप्पणी के बारे में: मैंने पाया कि मुझे एचटीएमएजीलिटीपैक के लिए अपना संदर्भ फिर से जोड़ना होगा, जब पहली बार एसवीएन के माध्यम से एसवीएन के माध्यम से परियोजना लाएगा।
एंड्रयू कॉन्स

14
HTMLAgilityPack में किसी को भी CsQuery पर विचार करना चाहिए, यह मेरे अनुभव से बहुत अधिक आधुनिक इंटरफ़ेस के साथ एक बहुत नया पुस्तकालय है। उदाहरण के लिए, पहले उत्तर से पूरे कोड को CsQuery में सम्‍मिलित किया जा सकता है var body = CQ.CreateFromFile(filePath)["body"]
बेंजामिन ग्रुएनबाम

2
@BenjaminGruenbaum: आपके CsQuery सुझाव के लिए अंगूठे - मिनटों में सेट, उपयोग करने के लिए बहुत आसान है।
नियोलिस्क

जवाबों:


358

सबसे पहले, अपनी परियोजना में HTMLAgilityPack nuget पैकेज स्थापित करें ।

फिर, एक उदाहरण के रूप में:

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
        }
    }
}

(एनबी: यह कोड केवल एक उदाहरण है और जरूरी नहीं कि सबसे अच्छा / एकमात्र तरीका हो। इसे अपने आवेदन में आँख बंद करके इस्तेमाल न करें।)

यह HtmlDocument.Load()विधि एक स्ट्रीम को भी स्वीकार करती है जो .NET फ्रेमवर्क में अन्य स्ट्रीम ओरिएंटेड क्लासेस के साथ एकीकृत करने में बहुत उपयोगी है। जबकि HtmlEntity.DeEntitize()HTML संस्थाओं को सही ढंग से संसाधित करने के लिए एक और उपयोगी तरीका है। (धन्यवाद मैथ्यू)

HtmlDocumentऔर HtmlNode वे कक्षाएं हैं जिनका आप सबसे अधिक उपयोग करेंगे। XML पार्सर के समान, यह SelectSingleNode और SelectNodes विधियाँ प्रदान करता है जो XPath अभिव्यक्तियों को स्वीकार करते हैं।

HtmlDocument.Option?????? बूलियन गुणों पर ध्यान दें । ये नियंत्रण Loadऔर LoadXMLतरीके आपके HTML / XHTML को कैसे संसाधित करेंगे।

एक संकलित सहायता फ़ाइल भी है जिसे HtmlAgilityPack.chm कहा जाता है जिसमें प्रत्येक ऑब्जेक्ट के लिए एक पूर्ण संदर्भ है। यह आम तौर पर समाधान के आधार फ़ोल्डर में है।


11
यह भी ध्यान दें कि लोड एक स्ट्रीम पैरामीटर को स्वीकार करता है, जो कई स्थितियों में सुविधाजनक है। मैंने इसका उपयोग एक HTTP स्ट्रीम (WebResponse.GetResponseStream) के लिए किया। HtmlEntity.DeEntitize (HTML Agility Pack का हिस्सा) के बारे में पता करने के लिए एक और अच्छी विधि है। कुछ मामलों में मैन्युअल रूप से संस्थाओं को संसाधित करने के लिए यह आवश्यक है।
मैथ्यू फ्लैशेन

1
नोट: Html Agility Pack (1.4.0 Beta 2 रिलीज़ 3 अक्टूबर 2009) के नवीनतम बीटा में, सैंडकैसल, डॉकप्रोजेक्ट और विज़ुअल स्टूडियो 2008 SDK पर निर्भरता के कारण सहायता फ़ाइल को एक अलग डाउनलोड में बदल दिया गया है।
rtpHarry

SelectSingleNode() लगता है कुछ समय पहले हटा दिया गया है
क्रिस एस

3
नहीं, SelectSingleNode और SelectNodes निश्चित रूप से अभी भी हैं। मुझे यह थोड़ा दिलचस्प लगता है कि यह htmlDoc.ParseErrors.Count (), नहीं होना चाहिए ।ाउंट
माइक

1
@ माइकबेलफोर्ड // आंशिक रूप से हाँ। HtmlAgailityPack के पीसीएल संस्करण में इसे हटाया जाना (या शुरुआत से मौजूद नहीं) लगता है। nuget.org/packages/HtmlAgilityPack-PCL
Joon Hong

166

मुझे नहीं पता कि यह आपकी किसी मदद के लिए होगा, लेकिन मैंने कुछ लेख लिखे हैं जो मूल बातें पेश करते हैं।

अगला लेख 95% पूरा हो गया है, मुझे बस मेरे द्वारा लिखे गए कोड के पिछले कुछ हिस्सों के स्पष्टीकरण लिखना होगा। यदि आप रुचि रखते हैं तो मैं प्रकाशित होने पर यहां पोस्ट करने के लिए याद रखने की कोशिश करूंगा।



3
हाल ही में कोड प्रोजेक्ट में इसे HTMLAgilityPack का एक बहुत अच्छा लेख जारी किया गया है। आप इसे यहाँ
विक्टर सिगलर

64

HtmlAgilityPack XPath सिंटैक्स का उपयोग करता है, और हालांकि कई तर्क देते हैं कि यह खराब रूप से प्रलेखित है, मुझे इस XPath डॉक्यूमेंटेशन की मदद से इसका उपयोग करने में कोई परेशानी नहीं हुई: https://www.w3schools.com/xml/xpath_nyntax.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मानक पर निर्भर है । पहले यह सीखना चाहिए कि मानक और उसके बाद सब कुछ आसान हो जाएगा।
FindOut_Quran

आपके द्वारा प्रदान किया गया लिंक अब उपलब्ध नहीं है। यह शायद नया है: w3schools.com/xsl/xpath_syntax.asp
पिओट्रैक

भी मैं DocumentNode ऑब्जेक्ट में कोई SelectNodes () फ़ंक्शन नहीं देख सकता। क्या इसका नाम बदला गया है?
पियोट्रेक

आप किस संस्करण का उपयोग कर रहे हैं और आपने इसे कहां से डाउनलोड किया है? Htmlagilitypack.codeplex.com/SourceControl/latest#Release/1_4_0/… के अनुसार HtmlNode क्लास में SelectNodes विधि होनी चाहिए।
केंट मुन्थे कैस्परसन

लिंक उपलब्ध नहीं है, नया लिंक: www.w3schools.com/xml/xpath_syntax.asp
Tyrmos

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
वेबसाइट अब उपलब्ध नहीं है
Dimitar Tsonev

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

प्रारंभ करना - HTML चपलता पैक

// 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;
        }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.