2009-03-17 15 views
45

मैं जटिल वेब पेजों से तालिकाओं को पार्स करने के लिए एचटीएमएल चपलता पैक का उपयोग करना चाहता हूं, लेकिन मैं ऑब्जेक्ट मॉडल में किसी तरह खो गया हूं।एचटीएमएल एजिलिटी पैक - पार्सिंग टेबल

मैंने लिंक उदाहरण देखा, लेकिन इस तरह कोई टेबल डेटा नहीं मिला। क्या मैं टेबल प्राप्त करने के लिए XPath का उपयोग कर सकता हूं? टेबल को कैसे प्राप्त किया जाए, इस बारे में डेटा लोड करने के बाद मैं मूल रूप से खो गया हूं। मैंने इसे पर्ल में पहले किया है और यह थोड़ा बेकार था, लेकिन काम किया। (HTML::TableParser)।

मैं भी खुश हूं अगर कोई पार्सिंग के लिए सही ऑब्जेक्ट ऑर्डर पर प्रकाश डाल सकता है।

उत्तर

96

कैसे की तरह कुछ के बारे में: का प्रयोग HTML Agility Pack

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml(@"<html><body><p><table id=""foo""><tr><th>hello</th></tr><tr><td>world</td></tr></table></body></html>"); 
foreach (HtmlNode table in doc.DocumentNode.SelectNodes("//table")) { 
    Console.WriteLine("Found: " + table.Id); 
    foreach (HtmlNode row in table.SelectNodes("tr")) { 
     Console.WriteLine("row"); 
     foreach (HtmlNode cell in row.SelectNodes("th|td")) { 
      Console.WriteLine("cell: " + cell.InnerText); 
     } 
    } 
} 

नोट कि आप इसके साथ LINQ करने वाली वस्तुओं खूबसूरत अगर आप चाहते हैं कर सकते हैं: मैं

var query = from table in doc.DocumentNode.SelectNodes("//table").Cast<HtmlNode>() 
      from row in table.SelectNodes("tr").Cast<HtmlNode>() 
      from cell in row.SelectNodes("th|td").Cast<HtmlNode>() 
      select new {Table = table.Id, CellText = cell.InnerText}; 

foreach(var cell in query) { 
    Console.WriteLine("{0}: {1}", cell.Table, cell.CellText); 
} 
+1

हाय मार्क, क्या आप बड़ी फाइलों को पार्स करने पर सलाह दे सकते हैं? 50 एमबी फाइलों से अधिक, मैं बाल टी नोड्स नहीं ला सकता बड़ी फाइलों पर। –

+0

@Marc - यदि तालिका पेजिंग है, तो स्क्रैप करके अगले पृष्ठ पर कैसे जाएं? –

+0

@Dark_Knight आपको जो भी AJAX मार्ग मूल पृष्ठ –

31

सबसे सरल क्या है किसी विशेष तत्व के लिए XPath प्राप्त करने के लिए फ़ायरफ़ॉक्स के लिए फ़ायरबग एक्सटेंशन स्थापित करना है साइट/वेबपृष्ठ पर जाएं फ़ायरबग लाने के लिए F12 दबाएं; सही चयन करें और उस पृष्ठ पर मौजूद तत्व पर राइट क्लिक करें जिसे आप क्वेरी करना चाहते हैं और "एलिमेंट का निरीक्षण करें" का चयन करें फ़ायरबग अपने आईडीई में तत्व का चयन करेगा और फिर फायरबग में एलिमेंट पर राइट क्लिक करें और "XPath कॉपी करें" चुनें, यह फ़ंक्शन आपको सटीक XPath देगा एचटीएमएल एजिलिटी लाइब्रेरी का उपयोग कर आप जिस तत्व को चाहते हैं उसे पाने के लिए आपको जिस प्रश्न की आवश्यकता है। इस सवाल का जवाब ऊपर से

+3

ध्यान रखें कि कभी-कभी ब्राउजर एचटीएमएल के डीओएम को थोड़ा बदल देगा - जैसे

में गायब होने पर। डिफ़ॉल्ट रूप से एचटीएमएल एजिलिटी पैक में HTML को पार्स करते समय और