Tools om het web vast te leggen en te converteren

Web Scraper API voor ASP.NET ASP.NET Scraper API

Allereerst hier de Web Scraper API voor ASP.NET en inspecteer de handler.ashx in het voorbeeldwebproject om aan de slag te gaan.

Geschraapte gegevens verwerken

De eenvoudigste manier om geschraapte gegevens te verwerken, is toegang tot de gegevens als een JSON- of XML-object, omdat de gegevens hierdoor gemakkelijk kunnen worden gemanipuleerd en opgevraagd. De JSON zal worden gestructureerd in het volgende algemene formaat met de gegevenssetnaam als het objectkenmerk, dat zelf een reeks objecten bevat met elke kolomnaam als een ander kenmerk.

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

Allereerst moet worden bedacht dat de handler alle geschraapte gegevens zal ontvangen, waaronder mogelijk gegevens die niet kunnen worden geconverteerd naar JSON- of XML-objecten. Daarom moet het type gegevens dat u ontvangt, worden gecontroleerd voordat deze worden verwerkt.

Met de ASP.NET API is echter een extra stap vereist om JSON- of XML-bestanden te lezen, waarin klassen worden gemaakt die overeenkomen met de verwachte gegevensstructuur. Een voorbeeld hiervan wordt hieronder getoond waar twee klassedefinities zijn gemaakt voor de bovenstaande JSON-gegevensstructuur.

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

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

Deze klassen worden nu gebruikt om een ​​JSON-bestand te converteren intoa bruikbare objectstructuur. In het onderstaande voorbeeld ontvangt de ScrapeResult-constructor hieronder de klasse HttpRequest, maar deze accepteert ook de klasse HttpRequestBase om deze compatibel te maken met ASP.NET MVC-webprojecten.

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));
}

Het bovenstaande voorbeeld laat zien hoe u alle resultaten van de gegevenssetklasse kunt doorlopen en specifieke acties kunt uitvoeren, afhankelijk van de waarde van de Column_Two eigendom. Ook als het door de handler ontvangen bestand geen JSON-bestand is, dan is het gewoon saved naar resultatenmap. Hoewel de ScrapeResult-klasse probeert ervoor te zorgen dat alle geposte bestanden afkomstig zijn van de servers van GrabzIt, moet de extensie van de bestanden ook worden gecontroleerd voordat ze saved.

ScrapeResult-methoden en eigenschappen

Hieronder staan ​​alle methoden en eigenschappen van de klasse ScrapeResult die kunnen worden gebruikt om scrape-resultaten te verwerken.

  • string Extension - krijgt de extensie van elk bestand dat het resultaat is van de scrape.
  • string Filename - haalt de bestandsnaam op van elk bestand dat voortkomt uit het schrapen.
  • T FromJSON<T>() - converteert elk JSON-bestand dat resulteert uit het schrapen naar het opgegeven type.
  • string ToString() - converteert elk bestand dat resulteert uit het schrapen naar een string.
  • T FromXML<T>() - converteert elk XML-bestand als gevolg van het schrapen naar het opgegeven type.
  • boolean Save(string path) - saves elk bestand dat voortkomt uit het schrapen, retourneert true als het slaagt.

Debugging

De beste manier om uw ASP.NET-handler te debuggen is door de resultaten voor een scrape te downloaden van de web krassen pagina, save het bestand waarmee u een probleem ondervindt naar een toegankelijke locatie en geef het pad van dat bestand door aan de constructor van de klasse ScrapeResult. Hiermee kunt u uw handler debuggen zonder dat u elke keer opnieuw hoeft te krabben, zoals hieronder wordt weergegeven.

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

#the rest of your handler code remains the same

Een schraapbediening besturen

Met de Web Scraper API van GrabzIt kunt u die status van een scrape ook wijzigen, een scrape starten, stoppen of desgewenst uitschakelen. Dit wordt in het onderstaande voorbeeld getoond door de ID van het schraapje door te geven met de gewenste schraapstatus die door de ScrapeStatus opsomming van de 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);
}

GrabzItScrapeClient-methoden en eigenschappen

Hieronder staan ​​alle methoden en eigenschappen van de klasse GrabzItScrapeClient die kunnen worden gebruikt om krassen te beheren.

  • GrabzItScrape[] GetScrapes() - retourneert alle gebruikers kladjes, inclusief schraapresultaten als een reeks GrabzItScrape-objecten.
  • GrabzItScrape GetScrape(string id) - retourneert een GrabzItScrape-object dat het gewenste schraapsel vertegenwoordigt.
  • bool SetScrapeProperty(string id, IProperty property) - stelt de eigendom van een schraapsel en retourneert true indien succesvol.
  • bool SetScrapeStatus(string id, ScrapeStatus status) - stelt de status van een scrape in en retourneert true indien succesvol.
  • bool SendResult(string id, string resultId) - verzendt het resultaat van een scrape en geeft waar terug als succesvol.
    • De scrape-id en de resultaat-id zijn te vinden via de methode GetScrape.
  • SetLocalProxy (string proxyUrl) - stelt de lokale proxyserver in voor alle verzoeken.