Ferramentas para capturar e converter a Web

API do raspador da Web para ASP.NET

API do Raspador do ASP.NET

Em primeiro lugar download a API do raspador da Web para ASP.NET e inspecione o handler.ashx localizado no projeto da Web de amostra para começar.

Processar dados raspados

A maneira mais fácil de processar dados raspados é acessar os dados como um objeto JSON ou XML, pois isso permite que os dados sejam facilmente manipulados e consultados. O JSON será estruturado no seguinte formato geral com o nome do conjunto de dados como atributo do objeto, contendo ele próprio uma matriz de objetos com cada nome de coluna como outro atributo.

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

Antes de tudo, deve-se lembrar que o manipulador receberá todos os dados raspados, que podem incluir dados que não podem ser convertidos em objetos JSON ou XML. Portanto, o tipo de dados que você está recebendo deve ser verificado antes de ser processado.

No entanto, com a API do ASP.NET, é necessária uma etapa extra para ler arquivos JSON ou XML, nos quais são criadas classes que correspondem à estrutura de dados esperada. Um exemplo disso é mostrado abaixo, quando duas definições de classe foram criadas para manter a estrutura de dados JSON acima.

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

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

Essas classes agora são usadas para converter um arquivo JSON into uma estrutura de objetos utilizável. No exemplo abaixo, o construtor ScrapeResult abaixo está recebendo a classe HttpRequest, mas também aceita a classe HttpRequestBase para torná-lo compatível com os projetos da Web do 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));
}

O exemplo acima mostra como percorrer todos os resultados da classe de conjunto de dados e executar ações específicas, dependendo do valor do Column_Two propriedade. Além disso, se o arquivo recebido pelo manipulador não for um arquivo JSON, será apenas saved para o diretório de resultados. Enquanto a classe ScrapeResult tenta garantir que todos os arquivos publicados sejam originários dos servidores do GrabzIt, a extensão dos arquivos também deve ser verificada antes de serem saved.

Métodos e propriedades ScrapeResult

Listados abaixo estão todos os métodos e propriedades da classe ScrapeResult que podem ser usados ​​para processar resultados de raspagem.

depuração

A melhor maneira de depurar seu manipulador ASP.NET é baixar os resultados de uma raspagem do diretório arranhões na web página, save o arquivo com o qual você está tendo problemas para um local acessível e, em seguida, passe o caminho desse arquivo para o construtor da classe ScrapeResult. Isso permite que você depure seu manipulador sem precisar fazer uma nova limpeza a cada vez, como mostrado abaixo.

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

#the rest of your handler code remains the same

Controlando uma raspagem

Com a Web Scraper API do GrabzIt, você também pode alterar o status de uma raspagem, iniciando, parando ou desativando uma raspagem, conforme necessário. Isso é mostrado no exemplo abaixo, passando o ID da raspagem junto com o status de raspagem desejado fornecido pelo ScrapeStatus enum para o 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/");
}
//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 e propriedades de GrabzItScrapeClient

Listados abaixo estão todos os métodos e propriedades da classe GrabzItScrapeClient que podem ser usados ​​para controlar arranhões.

  • SetLocalProxy (string proxyUrl) - define o servidor proxy local a ser usado para todas as solicitações.