使用json数据解析站点(第2部分)

时间:2012-06-26 17:34:19

标签: asp.net json parsing

我成功解析了我想要的网站,但是我无法保留这些数据,因为30分钟后我所使用的链接无效。任何人都可以解释一下发生了什么,我该如何解决这个问题? 我的代码是:

        WebClient wc = new WebClient();
        wc.Headers.Add("Referer", "http://sletat.ru/");//MUST BE THIS HEADER
        string result = wc.DownloadString("http://module.sletat.ru/Main.svc/GetTours?cityFromId=832&countryId=35&cities=3106&meals=&stars=&hotels=&s_adults=1&s_kids=0&s_kids_ages=&s_nightsMin=6&s_nightsMax=16&s_priceMin=0&s_priceMax=&currencyAlias=EUR&s_departFrom=26%2F06%2F2012&s_departTo=19%2F07%2F2012&visibleOperators=&s_hotelIsNotInStop=true&s_hasTickets=true&s_ticketsIncluded=true&debug=0&filter=0&f_to_id=&requestId=19446078&pageSize=20&pageNumber=1&updateResult=1&includeDescriptions=1&includeOilTaxesAndVisa=1&userId=&jskey=1&callback=_jqjsp&_1340728614816=");
        result = result.Substring(result.IndexOf("{"), result.LastIndexOf("}") - result.IndexOf("{") + 1);
        JavaScriptSerializer js = new JavaScriptSerializer();
        dynamic json = js.DeserializeObject(result);
        var prices = json["GetToursResult"]["Data"]["aaData"] as object[];
        // var operators = ((object[])json["result"]["prices"]).Cast<Dictionary<string, object>>();
        var temp = prices.ToList().Take(20).Select(x => new TableRow
        {
            Operator = (x as object[])[18].ToString(),

        }).ToList();
        string str = "";

        foreach (var tableRow in temp)
        {
            str += tableRow.Operator + "<br />";
        }
        Response.Write(str);

谢谢你的建议

1 个答案:

答案 0 :(得分:0)

似乎不断变化的链接部分是在服务器上生成的值,每个请求都会更改。 您可以在一个步骤中获得所需的数据,但需要执行以下几个步骤:

  1. 向主页http://sletat.ru
  2. 发出请求
  3. 解析步骤1中的响应。在响应标记中,您将找到每个新请求中正在更改的链接部分。
  4. 使用该数据创建请求并将其发送到服务器。