0

必要なサイトを正常に解析しましたが、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);

アドバイスありがとう

4

1 に答える 1

0

変化し続けるリンクの部分は、リクエストごとに変化するサーバー上で生成された値のようです。単一のステップではなく、次のようないくつかのステップで必要なデータを取得できます。

  1. メインページへのリクエストを実行するhttp://sletat.ru
  2. ステップ 1 からの応答を解析します。応答マークアップには、新しい要求ごとに変更されているリンクの部分があります。
  3. そのデータを使用してリクエストを作成し、サーバーに送信します。
于 2012-06-26T17:56:06.817 に答える