Ich habe einen Web Scraper entwickelt mit C #, Windows Forms und dem HTML Agility Pack.
Ich hatte alles super funktioniert, als die Seite ihren Code änderte und es kaputt machte. Ich weiß, dass es oft mit Web Scraper passiert, aber jetzt habe ich Probleme herauszufinden, wie man das Problem beheben kann.
Zu diesem Zeitpunkt durchläuft mein Scraper mehrere URLs und scrappt Daten von jeder Seite.
Das Problem, auf das ich stoße, ist, dass die Vorlage der Website, die es durchläuft, zufällig die neuere Vorlage zeigt, die nicht dieselben HTML-Klassen und IDs hat, die ich im Programm definiert habe. Was ich versuche zu tun, ist eine einfache, wenn das überprüft, ob ein einzelner Knoten wenn Null und wenn es einen separaten Satz von Code für die neue Vorlage ausgeführt wird.
Das Problem, das ich habe, ist, dass mein Programm eine NullReferenceException auf meine if-Anweisung wirft.
Hier ist die Aussage, die ich verwende, um zu überprüfen, ob es null ist:
var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']").InnerText;
if (varitem == null) MessageBox.Show("no titles");
Es löst die Ausnahme in der ersten Zeile aus, die die Variable definiert, und macht es nicht einmal zur if-Anweisung.
Jede Beratung wird geschätzt!
Zuerst sollten Sie überprüfen, ob
doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']")
gibt null zurück.
Wenn es null ist, erhalten Sie die NullReferenceException
von null.InnerText
versuche es unten
var varitem = doc.DocumentNode.SelectSingleNode("//h1[@class='producttitle']");
SelectSingleNode
kann null zurückgeben, und Sie sollten besser überprüfen, ob InnerText
auch nicht null oder leer ist
if (varitem == null || string.IsNullOrEmpty(varitem.InnerText))
MessageBox.Show("no titles");