2011-03-16 10 views
5

के साथ एक वेबपृष्ठ स्क्रैप करना मैंने पढ़ा है कि HTMLAgility 1.4 वेबपृष्ठ को स्क्रैप करने का एक अच्छा समाधान है। एक नया प्रोग्रामर होने के नाते मुझे आशा है कि मुझे इस परियोजना पर कुछ इनपुट मिल सकता है। मैं इसे एक सी # आवेदन पत्र के रूप में कर रहा हूं। जिस पृष्ठ के साथ मैं काम कर रहा हूं वह काफी सीधे है। मुझे जो जानकारी चाहिए वह केवल 2 टैग और के बीच फंस गई है। मेरा लक्ष्य भाग-संख्या, मनु-संख्या, विवरण, मनु-देश, अंतिम संशोधित, अंतिम संशोधित पृष्ठ के बाहर डेटा को खींचना है और डेटा को एक एसक्यूएल तालिका में भेजना है। एक मोड़ यह है कि एक छोटी पीएनजी तस्वीर भी है जिसे src = "/ partcode/number से पकड़ने की आवश्यकता है।सी # और HTMLAgility

मेरे पास कोई पूरा कोड नहीं है जो मुझे लगता है। मैंने सोचा कि यह कोड मुझे बताएगा अगर मैं सही दिशा में जा रहा हूं। यहां तक ​​कि डीबग में कदम उठाने से मैं नहीं देख सकता कि यह कुछ भी करता है। क्या कोई संभवतः मुझे इस पर सही दिशा में इंगित कर सकता है। यह स्पष्ट है क्योंकि यह स्पष्ट है क्योंकि मेरे पास बहुत कुछ है जानने के लिए धन्यवाद मैं वास्तव में यह जानना चाहेंगे

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using HtmlAgilityPack; 
using System.Xml; 

namespace Stats 
{ 
    class PartParser 
    { 
     static void Main(string[] args) 
     { 
      HtmlDocument doc = new HtmlDocument(); 
      doc.LoadHtml("http://localhost");//my understanding this reads the entire page in? 
      var tables = doc.DocumentNode.SelectNodes("//table");// I assume that this sets up the search for words containing table 

     } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
       Console.WriteLine(ex.StackTrace); 
       Console.ReadKey();  
      } 
     } 
    } 
} 

वेब कोड है:।।

<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> 
<title>Part Number Database: Item Record</title> 
<table class="data"> 
<tr><td>Part-Num</td><td width="50"></td><td><img src="/partcode/number/072140" alt="072140"/></td></tr> 
<tr><td>Manu-Number</td><td width="50"></td><td><img src="/partcode/manu/00721408" alt="00721408" /></td></tr>  
<tr><td>Description</td><td></td><td>Widget 3.5</td></tr> 
<tr><td>Manu-Country</td><td></td><td>United States</td></tr>  
<tr><td>Last Modified</td><td></td><td>26 Jan 2009, 8:08 PM</td></tr>  
<tr><td>Last Modified By</td><td></td><td>Manu</td></tr> 
</table> 
<p> 
</body> 
</html> 
+0

यदि आप प्रदान किए गए HTML कोड का उपयोग कर एक कार्य कोड चाहते हैं तो मेरा उत्तर देखें। –

उत्तर

5

4GuysFromRolla

पर

http://www.4guysfromrolla.com/articles/011211-1.aspx

यह लेख मैं HTML चपलता पैक के साथ अपने प्रारंभिक बिंदु के रूप में प्रयोग किया जाता है इस लेख को देखें और यह बहुत अच्छा काम किया है। मुझे पूरा भरोसा है कि आप जिन कार्यों को पूरा करने का प्रयास कर रहे हैं, उन्हें करने के लिए आपको इस लेख से आवश्यक सारी जानकारी मिल जाएगी।

5

शुरुआत हिस्सा है: दस्तावेज़ में

HtmlDocument doc = new HtmlDocument(); 
doc.LoadHtml("http://localhost"); 

LoadHtml(html) भार एक एचटीएमएल स्ट्रिंग, मुझे लगता है कि आप के बजाय कुछ इस तरह हैं:

HtmlWeb htmlWeb = new HtmlWeb(); 
HtmlDocument doc = htmlWeb.Load("http://stackoverflow.com"); 
4

एक काम कर कोड, एचटीएमएल के अनुसार आपके द्वारा प्रदान किया गया स्रोत। इसे कारक बनाया जा सकता है, और मैं शून्य मानों (rows, cells में, और case के अंदर प्रत्येक मान) की जांच नहीं कर रहा हूं। यदि आपके पास पृष्ठ 127.0.0.1 है, तो यह काम करेगा। इसे Mainकंसोल एप्लिकेशन की विधि के अंदर पेस्ट करें और इसे समझने का प्रयास करें।

HtmlDocument doc = new HtmlWeb().Load("http://127.0.0.1");  

var rows = doc.DocumentNode.SelectNodes("//table[@class='data']/tr"); 
foreach (var row in rows) 
{ 
    var cells = row.SelectNodes("./td"); 
    string title = cells[0].InnerText; 
    var valueRow = cells[2]; 
    switch (title) 
    { 
     case "Part-Num": 
      string partNum = valueRow.SelectSingleNode("./img[@alt]").Attributes["alt"].Value; 
      Console.WriteLine("Part-Num:\t" + partNum); 
      break; 
     case "Manu-Number": 
      string manuNumber = valueRow.SelectSingleNode("./img[@alt]").Attributes["alt"].Value; 
      Console.WriteLine("Manu-Num:\t" + manuNumber); 
      break; 
     case "Description": 
      string description = valueRow.InnerText; 
      Console.WriteLine("Description:\t" + description); 
      break; 
     case "Manu-Country": 
      string manuCountry = valueRow.InnerText; 
      Console.WriteLine("Manu-Country:\t" + manuCountry); 
      break; 
     case "Last Modified": 
      string lastModified = valueRow.InnerText; 
      Console.WriteLine("Last Modified:\t" + lastModified); 
      break; 
     case "Last Modified By": 
      string lastModifiedBy = valueRow.InnerText; 
      Console.WriteLine("Last Modified By:\t" + lastModifiedBy); 
      break; 
    } 
} 
+0

इस उदाहरण के लिए धन्यवाद, इसने मुझे एचटीएमएल चपलता का उपयोग करने पर थोड़ा और सिखाया है। यदि आपकी चुनौती में रूचि है तो मेरे पास एक और पृष्ठ है, मैं उस डेटा से प्राप्त करने पर काम कर रहा हूं जिसमें एक सामान्य लेआउट नहीं है। मुझे यह देखना अच्छा लगेगा कि आप स्थिति को कैसे संभालेंगे। – JRB

+2

@ जेआरबी खैर, मेरा सुझाव है कि आप इसे स्वयं पहले कोशिश कर रहे हैं, और यदि आपको इसे काम करने में समस्याएं हैं, तो इसे एक प्रश्न के रूप में पोस्ट करें और आपने क्या करने की कोशिश की, और हम आपकी मदद करने की कोशिश करेंगे। –