捕获和转换Web的工具

适用于ASP.NET的Web Scraper API ASP.NET Scraper API

首先 下载 使用适用于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方法和属性

下面列出了可用于处理抓取结果的ScrapeResult类的所有方法和属性。

  • string Extension -获取由刮擦产生的任何文件的扩展名。
  • string Filename -获取刮擦产生的任何文件的文件名。
  • T FromJSON<T>() -将由抓取产生的所有JSON文件转换为指定的类型。
  • string ToString() -将刮擦产生的任何文件转换为 string.
  • T FromXML<T>() -将由抓取产生的所有XML文件转换为指定的类型。
  • boolean Save(string path) - saves由刮擦产生的任何文件,如果成功,则返回true。

调试

调试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.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方法和属性

下面列出了可用于控制刮擦的GrabzItScrapeClient类的所有方法和属性。

  • GrabzItScrape[] GetScrapes() -返回所有用户抓取,其中包括抓取结果作为GrabzItScrape对象的数组。
  • GrabzItScrape GetScrape(string id) -返回代表所需抓取的GrabzItScrape对象。
  • bool SetScrapeProperty(string id, IProperty property) -设置 刮擦的性质 如果成功,则返回true。
  • bool SetScrapeStatus(string id, ScrapeStatus status) -设置抓取的状态,如果成功,则返回true。
  • bool SendResult(string id, string resultId) -重新发送抓取的结果,如果成功,则返回true。
    • 可以从GetScrape方法中找到刮擦ID和结果ID。
  • SetLocalProxy(string proxyUrl) -将本地代理服务器设置为用于所有请求。