首先 下载 使用适用于ASP.NET的Web Scraper API,并检查示例Web项目中的handler.ashx以开始使用。
处理已抓取数据的最简单方法是将数据作为JSON或XML对象进行访问,因为这使数据易于操作和查询。 JSON将以以下通用格式进行构造,以数据集名称作为对象属性,本身包含一个对象数组,每个列名称作为另一个属性。
{ "Items": [ { "Column_One": "https://grabz.it/", "Column_Two": "Found" }, { "Column_One": "http://dfadsdsa.com/", "Column_Two": "Missing" }] }
首先必须记住,将向处理程序发送所有已抓取的数据,其中可能包括无法转换为JSON或XML对象的数据。 因此,在处理之前,必须检查您接收到的数据类型。
但是,使用ASP.NET API时需要额外的步骤才能读取JSON或XML文件,在其中创建与所需数据结构匹配的类。 下面显示了一个示例,其中创建了两个类定义来保存上述JSON数据结构。
public class DataSet { public List<Item> Items; } public class Item { public string Column_One; public string Column_Two; }
这些类现在用于转换JSON文件 int可用的对象结构。 在下面的示例中,下面的ScrapeResult构造函数正在接收HttpRequest类,但是它也接受HttpRequestBase类以使其与ASP.NET MVC Web项目兼容。
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)); }
上面的示例显示了如何遍历数据集类的所有结果以及如何根据 Column_Two
属性。 另外,如果处理程序收到的文件不是JSON文件,那么它仅仅是 saved到结果目录。 虽然ScrapeResult类确实尝试确保所有发布的文件都来自GrabzIt的服务器,但在文件扩展名之前也应进行检查。 saved.
下面列出了可用于处理抓取结果的ScrapeResult类的所有方法和属性。
调试ASP.NET处理程序的最好方法是从 网页抓取 页, save 您遇到问题的文件到可访问的位置,然后将该文件的路径传递给ScrapeResult类的构造函数。 这使您可以调试处理程序,而不必每次都进行新的抓取,如下所示。
ScrapeResult scrapeResult = new ScrapeResult("data.json"); #the rest of your handler code remains the same
使用GrabzIt的Web Scraper API,您还可以根据需要更改刮擦的状态,启动,停止或禁用刮擦。 在下面的示例中,通过传递刮擦ID以及所需的刮擦状态来显示这一点 ScrapeStatus
枚举 SetScrapeStatus
方法。
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); }
下面列出了可用于控制刮擦的GrabzItScrapeClient类的所有方法和属性。