Tools zum Erfassen und Konvertieren des Webs

Web Scraper API für ASP.NET ASP.NET Scraper API

Zunächst herunterladen Überprüfen Sie die Web Scraper-API für ASP.NET und die Datei handler.ashx im Beispielwebprojekt, um loszulegen.

Verarbeiten Sie verkratzte Daten

Der einfachste Weg, um verkratzte Daten zu verarbeiten, besteht darin, auf die Daten als JSON- oder XML-Objekt zuzugreifen, da dies eine einfache Manipulation und Abfrage der Daten ermöglicht. Der JSON wird im folgenden allgemeinen Format mit dem Dataset-Namen als Objektattribut strukturiert. Er enthält selbst ein Array von Objekten, wobei jeder Spaltenname ein anderes Attribut ist.

{
  "Items": [
    {
      "Column_One": "https://grabz.it/",
      "Column_Two": "Found"
    },
    {
      "Column_One": "http://dfadsdsa.com/",
      "Column_Two": "Missing"
    }]
}

Zuallererst muss beachtet werden, dass dem Handler alle verkratzten Daten gesendet werden, einschließlich Daten, die nicht in JSON- oder XML-Objekte konvertiert werden können. Daher muss die Art der Daten, die Sie erhalten, vor der Verarbeitung überprüft werden.

Mit der ASP.NET-API ist jedoch ein zusätzlicher Schritt erforderlich, um JSON- oder XML-Dateien zu lesen, in denen Klassen erstellt werden, die der erwarteten Datenstruktur entsprechen. Im Folgenden wird ein Beispiel dafür gezeigt, in dem zwei Klassendefinitionen erstellt wurden, die die obige JSON-Datenstruktur enthalten.

public class DataSet
{
    public List<Item> Items;
}

public class Item
{
    public string Column_One;
    public string Column_Two;
}

Diese Klassen werden jetzt zum Konvertieren einer JSON-Datei verwendet into eine verwendbare Objektstruktur. Im folgenden Beispiel empfängt der ScrapeResult-Konstruktor die HttpRequest-Klasse, akzeptiert jedoch auch die HttpRequestBase-Klasse, um die Kompatibilität mit ASP.NET MVC-Webprojekten zu gewährleisten.

ScrapeResult scrapeResult = new ScrapeResult(context.Request);

if (scrapeResult.Extension == "json")
{
    DataSet dataSet = scrapeResult.FromJSON<DataSet>();
    foreach (Item item in dataSet.Items)
    {
        if (item.Column_Two == "Found")
        {
            //do something
        }
        else
        {
            //do something else
        }
    }
}
else
{
    //probably a binary file etc save it
    scrapeResult.save(context.Server.MapPath("~/results/" + scrapeResult.Filename));
}

Das obige Beispiel zeigt, wie Sie alle Ergebnisse der Dataset-Klasse durchlaufen und bestimmte Aktionen abhängig vom Wert von ausführen Column_Two Eigentum. Auch wenn die vom Handler empfangene Datei keine JSON-Datei ist, ist es einfach saved zum Ergebnisverzeichnis. Während die ScrapeResult-Klasse versucht sicherzustellen, dass alle veröffentlichten Dateien von GrabzIt-Servern stammen, sollte die Erweiterung der Dateien ebenfalls überprüft werden, bevor sie vorliegen saved.

ScrapeResult-Methoden und -Eigenschaften

Nachfolgend sind alle Methoden und Eigenschaften der ScrapeResult-Klasse aufgeführt, die zum Verarbeiten von Scrape-Ergebnissen verwendet werden können.

  • string Extension - Ruft die Erweiterung einer Datei ab, die aus dem Scrape resultiert.
  • string Filename - Ruft den Dateinamen einer Datei ab, die aus dem Scrape resultiert.
  • T FromJSON<T>() - konvertiert alle aus dem Scrape resultierenden JSON-Dateien in den angegebenen Typ.
  • string ToString() - konvertiert alle aus dem Scrape resultierenden Dateien in eine string.
  • T FromXML<T>() - konvertiert alle aus dem Scrape resultierenden XML-Dateien in den angegebenen Typ.
  • boolean Save(string path) - saveWenn eine Datei aus dem Scrape resultiert, wird true zurückgegeben, wenn sie erfolgreich ist.

Fehlerbeseitigung

Die beste Methode zum Debuggen Ihres ASP.NET-Handlers besteht darin, die Ergebnisse für eine Scrape-Datei von der herunterzuladen Web-Scrapes Seite save die Datei, mit der Sie ein Problem haben, an einen zugänglichen Speicherort und übergeben Sie den Pfad dieser Datei an den Konstruktor der ScrapeResult-Klasse. Auf diese Weise können Sie Ihren Handler debuggen, ohne jedes Mal ein neues Scrape ausführen zu müssen, wie unten gezeigt.

ScrapeResult scrapeResult = new ScrapeResult("data.json");

#the rest of your handler code remains the same

Kratzer kontrollieren

Mit der Web Scraper-API von GrabzIt können Sie auch den Status eines Scrapes ändern, indem Sie ein Scrape nach Bedarf starten, stoppen oder deaktivieren. Dies wird im folgenden Beispiel gezeigt, indem die ID des Kratzers zusammen mit dem gewünschten Kratzerstatus übergeben wird, der von der bereitgestellt wird ScrapeStatus Aufzählung der SetScrapeStatus Methode.

GrabzItScrapeClient client = new GrabzItScrapeClient("Sign in to view your Application Key", "Sign in to view your Application Secret");
//Get all of our scrapes
GrabzItScrape[] myScrapes = client.GetScrapes();
if (myScrapes.Length == 0)
{
    throw new Exception("You haven't created any scrapes yet! Create one here: https://grabz.it/scraper/scrape.aspx");
}
//Start the first scrape
client.SetScrapeStatus(myScrapes[0].ID, ScrapeStatus.Start);
if (myScrapes[0].Results.Length > 0)
{
    //re-send first scrape result if it exists
    client.SendResult(myScrapes[0].ID, myScrapes[0].Results[0].ID);
}

Methoden und Eigenschaften von GrabzItScrapeClient

Nachfolgend sind alle Methoden und Eigenschaften der GrabzItScrapeClient-Klasse aufgeführt, mit denen Scrapes gesteuert werden können.

  • GrabzItScrape[] GetScrapes() - Gibt alle Scrapes des Benutzers zurück, einschließlich Scrape-Ergebnissen als Array von GrabzItScrape-Objekten.
  • GrabzItScrape GetScrapes(string id) - gibt ein GrabzItScrape-Objekt zurück, das das gewünschte Scrape darstellt.
  • bool SetScrapeProperty(string id, IProperty property) - setzt den Eigentum eines Kratzbaums und gibt bei Erfolg true zurück.
  • bool SetScrapeStatus(string id, ScrapeStatus status) - Setzt den Status eines Scrapes und gibt bei Erfolg true zurück.
  • bool SendResult(string id, string resultId) - Sendet das Ergebnis eines Scrapes erneut und gibt bei Erfolg true zurück.
    • Die Scrape-ID und die Ergebnis-ID finden Sie in der GetScrape-Methode.
  • SetLocalProxy (string proxyUrl) - Legt fest, dass der lokale Proxy-Server für alle Anforderungen verwendet wird.