Herramientas para capturar y convertir la web

API de Web Scraper para ASP.NET API ASP.NET Scraper

Ante todo descargar la API de Web raspador para ASP.NET e inspeccionar el handler.ashx situado en el proyecto web de muestra para empezar.

Procesar datos raspados

La forma m√°s f√°cil de procesar datos raspados es acceder a los datos como un objeto JSON o XML, ya que esto permite que los datos sean f√°cilmente manipulados y consultados. El JSON se estructurar√° en el siguiente formato general con el nombre del conjunto de datos como el atributo del objeto, que contiene una matriz de objetos con cada nombre de columna como otro atributo.

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

En primer lugar, debe recordarse que al controlador se le enviar√°n todos los datos raspados, que pueden incluir datos que no se pueden convertir a objetos JSON o XML. Por lo tanto, el tipo de datos que est√° recibiendo debe verificarse antes de ser procesado.

Sin embargo, con la API ASP.NET se requiere un paso adicional para leer archivos JSON o XML, en el que se crean clases que coinciden con la estructura de datos esperada. A continuación se muestra un ejemplo de esto, donde se han creado dos definiciones de clase para contener la estructura de datos JSON anterior.

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

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

Estas clases ahora se usan para convertir un archivo JSON into una estructura de objeto utilizable. En el siguiente ejemplo, el constructor ScrapeResult a continuación está recibiendo la clase HttpRequest, sin embargo, también acepta la clase HttpRequestBase para que sea compatible con los proyectos web ASP.NET MVC.

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

El ejemplo anterior muestra c√≥mo recorrer todos los resultados de la clase de conjunto de datos y realizar acciones espec√≠ficas seg√ļn el valor de Column_Two propiedad. Adem√°s, si el archivo recibido por el controlador no es un archivo JSON, entonces es solo saved al directorio de resultados. Si bien la clase ScrapeResult intenta garantizar que todos los archivos publicados se originen en los servidores de GrabzIt, la extensi√≥n de los archivos tambi√©n debe verificarse antes de que sean saved.

Métodos y propiedades de ScrapeResult

A continuación se enumeran todos los métodos y propiedades de la clase ScrapeResult que se pueden usar para procesar resultados de raspado.

  • string Extension - Obtiene la extensi√≥n de cualquier archivo resultante del raspado.
  • string Filename - obtiene el nombre de archivo de cualquier archivo resultante del raspado.
  • T FromJSON<T>() - convierte cualquier archivo JSON resultante del raspado al tipo especificado.
  • string ToString() - convierte cualquier archivo resultante del raspado a un string.
  • T FromXML<T>() - convierte cualquier archivo XML resultante del raspado al tipo especificado.
  • boolean Save(string path) - saves cualquier archivo resultante del raspado, devuelve verdadero si tiene √©xito.

Depuración

La mejor manera de depurar su controlador ASP.NET es descargar los resultados para un raspado del rasgu√Īos web p√°gina, save el archivo con el que tiene un problema a una ubicaci√≥n accesible y luego pase la ruta de ese archivo al constructor de la clase ScrapeResult. Esto le permite depurar su controlador sin tener que hacer un nuevo raspado cada vez, como se muestra a continuaci√≥n.

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

#the rest of your handler code remains the same

Control de un raspado

Con la API de Web Scraper de GrabzIt tambi√©n puede cambiar el estado de un raspado, iniciando, deteniendo o deshabilitando un raspado seg√ļn sea necesario. Esto se muestra en el siguiente ejemplo haciendo pasar el ID de la raspadura junto con el estado rascado deseada proporcionada por el ScrapeStatus enumeraci√≥n a la SetScrapeStatus m√©todo.

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

Métodos y propiedades de GrabzItScrapeClient

A continuación se enumeran todos los métodos y propiedades de la clase GrabzItScrapeClient que se pueden usar para controlar raspaduras.

  • GrabzItScrape[] GetScrapes() - devuelve todos los raspados de los usuarios, lo que incluye los resultados del raspado como una matriz de objetos GrabzItScrape.
  • GrabzItScrape GetScrape(string id) - devuelve un objeto GrabzItScrape que representa el raspado deseado.
  • bool SetScrapeProperty(string id, IProperty property) - establece el propiedad de un rasgu√Īo y devuelve verdadero si tiene √©xito.
  • bool SetScrapeStatus(string id, ScrapeStatus status) - establece el estado de un rasgu√Īo y devuelve verdadero si tiene √©xito.
  • bool SendResult(string id, string resultId) - reenv√≠a el resultado de un raspado y devuelve verdadero si tiene √©xito.
    • El id de scrape y el id de resultado se pueden encontrar en el m√©todo GetScrape.
  • SetLocalProxy (string proxyUrl) - establece el servidor proxy local que se utilizar√° para todas las solicitudes.