Ich habe letzte Woche schlecht über das gleiche Projekt gefragt und keine Vorschläge erhalten. Ich werde versuchen, klarer zu sein. Ich versuche mit Daten von der Website www.gtin13.com zu arbeiten . Zum Beispiel, wenn Sie Erdnussbutter in die Suche eingeben, versuche ich, die Beschreibung zu ergreifen : ** Nabisco Nutter Butter Sandwich Cookies Schokolade Erdnussbutter 4 Ct Die * Größe : Größe: 12 Unzen Die GTIN: 0044000003562 * ean : ** 00- 44000-00356-2 upc: 044000003562 und upca: 04400000356. Ich habe versucht, nodeCollection mit SelectNodes ("<b>")
und alles, was ich bekomme sind Fehler. Ist es sogar möglich, mit html agility die Daten auch zwischen <b> <br>
zu packen und zwischen den / s zu analysieren? Mit meiner mangelnden Erfahrung kann ich hier keine Fortschritte machen. Es scheint nicht, dass die zurückgegebene Seite hat, was ich als echte Knoten betrachten würde. Wenn HTML-Agilität das nicht kann, kann jemand einen besseren Ansatz vorschlagen? Schließlich möchte ich jeden Teil der Daten an eine SQL-Tabelle senden. Ich hoffe, dass ich auf eine Weise dargestellt habe, die mehr Sinn macht.
Die Seite gibt die Informationen in diesem Quellformat zurück:
<b><a href="/product/nabisco+nutter+butter+sandwich+cookies+chocolate+peanut+butter+4+ct/">Nabisco Nutter Butter Sandwich Cookies Chocolate Peanut Butter 4 Ct</a></b><br />
Size: 12 oz<br />
GTIN/EAN-13: 0044000003562 / 00-44000-00356-2<br />
UPC-A: 044000003562 / 04400000356<br />
Tags:
<a href="/tag/chocolate/">Chocolate</a>,
<a href="/tag/cookies/">Cookies</a>,
..<br />
<br >
Es ist nicht so einfach, weil das Originaldokument ziemlich unstrukturiert ist (kein hierarchisches Layout, sondern ein flaches), aber hier können Sie die Haupttextfelder mit dem Html Agility Pack extrahieren:
HtmlDocument doc = new HtmlDocument();
doc.Load("yourDoc.Htm");
// Get A nodes that have an HREF attribute
foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//b/a[@href]"))
{
// This will contain anchor's displayed text
string title = node.InnerText;
Console.WriteLine("title=" + title);
// Get the 1st BR, and then it's next sibling of TEXT type.
HtmlNode sizeNode = node.SelectSingleNode("../following-sibling::br[1]/following-sibling::text()");
Console.WriteLine(" size=" + sizeNode.InnerText.Trim());
// Get the 3nd BR, and then it's next sibling of TEXT type.
HtmlNode eanNode = node.SelectSingleNode("../following-sibling::br[2]/following-sibling::text()");
Console.WriteLine(" ean=" + eanNode.InnerText.Trim());
// Get the 3rd BR, and then it's next sibling of TEXT type.
HtmlNode upcNode = node.SelectSingleNode("../following-sibling::br[3]/following-sibling::text()");
Console.WriteLine(" upc=" + upcNode.InnerText.Trim());
}
Dies wird angezeigt:
title=Peanut Delight Peanut Butter & Grape Jelly
size=Size: 18 oz
ean=GTIN/EAN-13: 0041498143909 / 00-41498-14390-9
upc=UPC-A: 041498143909 / 04149814390
title=Nabisco Nutter Butter Sandwich Cookie Bites Peanut Butter
size=Size: 10 oz
ean=GTIN/EAN-13: 0044000046118 / 00-44000-04611-8
upc=UPC-A: 044000046118 / 04400004611
title=Nabisco Nutter Butter Sandwich Cookies Chocolate Peanut Butter 4 Ct
size=Size: 12 oz
ean=GTIN/EAN-13: 0044000003562 / 00-44000-00356-2
upc=UPC-A: 044000003562 / 04400000356
etc...
Hinweis: Es ist nicht 100% fertig, wie Sie die Größe, ean und upc Variable mit Standard-String-Manipulation (IndexOf, Substring, etc ...) oder Regex analysieren müssen, aber die HTML-Seite der Dinge ist getan.
Bei Verwendung von HTQL lautet die Abfrage zum Extrahieren der gesamten Tabelle von der Seite:
<div (CLASS='BGC')>1.<div (CLASS='CON')>1.<div (CLASS='SC')>1.<div (ID='post-20')>1.<div (CLASS='PostContent')>1.<b sep>2-0 {
title=<a>1:tx;
size=/'Size:'~'<br />'/;
gtin=/'GTIN/EAN-13:'~'<br />'/;
upc=/'UPC-A:'~'<br />'/;
tags=/'Tags:'~'<br />'/;
}
Wenn Sie nur die Ergebnisse an die SQL-Datenbank senden müssen, dann schlage ich vor, dass Sie den IRobotSoft-Web-Scraper verwenden.