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.
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.
Listados abaixo estão todos os métodos e propriedades da classe ScrapeResult que podem ser usados para processar resultados de raspagem.
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
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); }
Listados abaixo estão todos os métodos e propriedades da classe GrabzItScrapeClient que podem ser usados para controlar arranhões.