2017-07-22 8 views
0

Ich versuche, den Code unten zu ändern, um Jobs von www.itoworld.com/careers zu kratzen. Die Jobs sind in einem Tabellenformat und geben alle Werte < 'td> zurück.Web-Scrape-Projekt zu viel Information schreiben

Ich glaube, es aus der Leitung kommt:

var parentnode = node.ParentNode.ParentNode.ParentNode.FirstChild.NextSibling 

Allerdings mag ich es schreiben:

<a class="std-btn" href="http://www.itoworld.com/office-manager/">Office Manager</a> 

Derzeit ist es das Schreiben

<a href='http://www.itoworld.com/office-manager/' target='_blank'>Office ManagerOffice & AdminCambridgeFind out more</a> 

ich auf ‚Brute-Plan Erzwinge, die Ausgabe zu ändern, um unnötige Extras zu entfernen, aber hoffte, dass es einen klügeren Weg gibt, dies zu tun. Gibt es eine Möglichkeit, zum Beispiel den zweiten und dritten ParentNode nach dem Aufruf zu entfernen? (So ​​dass sie nicht geschrieben werden?)

public string ExtractIto() 
    { 
     string sUrl = "http://www.itoworld.com/careers/"; 
     GlobusHttpHelper ghh = new GlobusHttpHelper(); 
     List<Links> link = new List<Links>(); 

     bool Next = true; 
     int count = 1; 

     string html = ghh.getHtmlfromUrl(new Uri(string.Format(sUrl))); 
     HtmlAgilityPack.HtmlDocument hd = new HtmlAgilityPack.HtmlDocument(); 
     hd.LoadHtml(html); 
     var hn = hd.DocumentNode.SelectSingleNode("//*[@class='btn-wrapper']"); 

     var hnc = hn.SelectNodes(".//a"); 

     foreach (var node in hnc) 
     { 

      try 
      { 
       var parentnode = node.ParentNode.ParentNode.ParentNode.FirstChild.NextSibling; 
       Links l = new Links(); 
       l.Name = ParseHtmlContainingText(parentnode.InnerText);  
       l.Link = node.GetAttributeValue("href", ""); 


       link.Add(l); 


      } 

     } 


     string Xml = getXml(link); 

     return WriteXml(Xml); 

Der Vollständigkeit unten ist die Definition von ParseHtmlContainingText

public string ParseHtmlContainingText(string htmlString) 
    { 
     return Regex.Replace(Regex.Replace(WebUtility.HtmlDecode(htmlString), @"<[^>]+>|&nbsp;", ""), @"\s{2,}", " ").Trim(); 
    } 

Antwort

0

Sie brauchen nur einen „Namen Knoten“ zu erstellen und diese Methode für Ihre Parsing verwenden.

Ich habe mit diesem Code getestet und es hat für mich funktioniert.

  var parentnode = node.ParentNode.ParentNode.ParentNode.FirstChild.NextSibling; 
      var nameNode = parentnode.FirstChild; 

      Links l = new Links(); 
      l.Name = ParseHtmlContainingText(nameNode.InnerText); 
      l.Link = node.GetAttributeValue("href", ""); 
+0

Das ist perfekt. Vielen Dank. Ich werde versuchen, die Vererbung besser zu verstehen. –