2016-12-27 20 views
-1

は私が持っているクラスでは:htmlページファイルから日付と時刻を抽出するにはどうすればよいですか?

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.IO; 
using System.Net; 

namespace SatelliteImages 
{ 
    class ExtractImages 
    { 
     static WebClient client; 
     List<string> imagesUrls = new List<string>(); 
     static string htmltoextract; 
     static string link; 
     static string text; 
     public static List<string> countriescodes = new List<string>(); 
     public static List<string> countriesnames = new List<string>(); 
     private static int lastsatimage = 0; 
     private static string Next_Sat_File; 
     private static string temp_sat_dir; 

     public void Init() 
     { 
      ExtractCountires(); 
     } 

     public static void ExtractCountires() 
     { 
      try 
      { 
       htmltoextract = "http://sat24.com/en/?ir=true"; 
       client = new WebClient(); 
       client.DownloadFile(htmltoextract, @"c:\temp\sat24.html"); 
       client.Dispose(); 

       string tag1 = "<li><a href=\"/en/"; 
       string tag2 = "</a></li>"; 

       string s = System.IO.File.ReadAllText(@"c:\temp\sat24.html"); 
       s = s.Substring(s.IndexOf(tag1)); 
       s = s.Substring(0, s.LastIndexOf(tag2) + tag2.ToCharArray().Length); 
       s = s.Replace("\r", "").Replace("\n", "").Replace(" ", ""); 

       string[] parts = s.Split(new string[] { tag1, tag2 }, StringSplitOptions.RemoveEmptyEntries); 


       string tag3 = "<li><ahref=\"/en/"; 

       for (int i = 0; i < parts.Length; i++) 
       { 
        if (i == 17) 
        { 
         break; 
        } 
        string l = ""; 
        if (parts[i].Contains(tag3)) 
         l = parts[i].Replace(tag3, ""); 

        string z1 = l.Substring(0, l.IndexOf('"')); 
        countriescodes.Add(z1); 

        string z2 = parts[i].Substring(parts[i].LastIndexOf('>') + 1); 
        countriesnames.Add(z2); 
       } 
      } 
      catch (Exception e) 
      { 

      } 
     } 
    } 
} 

私は、ファイル内のsat24.htmlファイルを読み込むときに日付と時刻は、htmlファイルにこの部分にあることがわかった。次に

var arrayImageTimes = []; 
arrayImageTimes.push('201612271810');arrayImageTimes.push('201612271825');arrayImageTimes.push('201612271840');arrayImageTimes.push('201612271855');arrayImageTimes.push('201612271910');arrayImageTimes.push('201612271925');arrayImageTimes.push('201612271940');arrayImageTimes.push('201612271955');arrayImageTimes.push('201612272010');arrayImageTimes.push('201612272025'); 

何私はしたいと思います日付と時間をexctractし、2つのリストに追加する:201612271810ので、最初のリストは、この形式です。

日時ないように注意してくださいどのような形式のものであると第二のリストが、:私は、後で何をしたいのか= 2016月年= 12日= 27時間= 18分= 10

は、新しいリンクを構築することです次のようにしてください:http://www.sat24.com/image2.ashx?region=is&time=201612271810&ir=true質問はどのようにして日付と時刻を抽出し、次にExtractCountriesメソッドを使ってリンクを構築するのですか? ExtractCountriesメソッドでは、国コードと国名の2つのリストを取得しています。

リンクを作成するために必要なものは、国/地域コードと国/地域日時です。

それでは、私は、例えば、日付、時間とコードのリストを使用することができます。

彼らはhtmlファイル形式であるとして最初のリストは、日付と時刻になります。たとえば、最初の日付をし、時間は次のとおりです。=イスラエルと201612271810この画像リンクの日付時間です

http://www.sat24.com/image2.ashx?region=is&time=201612271810&ir=true

。 または、例えば

http://www.sat24.com/image2.ashx?region=tu&time=201612271810&ir=true 

地域TUは七面鳥

あるので、私は必要なものをすべての国コードと地域ごとのすべての日付と時刻(countrey)から構築されたリンクのリストを取得することですので、私は、後でダウンロードすることができます画像。

http://www.sat24.com/image2.ashx?region=tu&time=201612271825&ir=true 
http://www.sat24.com/image2.ashx?region=tu&time=201612271840&ir=true 
http://www.sat24.com/image2.ashx?region=tu&time=201612271855&ir=true 
http://www.sat24.com/image2.ashx?region=tu&time=201612271910&ir=true 
. 
. 
. 
. 
. 
. 
http://www.sat24.com/image2.ashx?region=is&time=201612271810&ir=true 
http://www.sat24.com/image2.ashx?region=is&time=201612271825&ir=true 
http://www.sat24.com/image2.ashx?region=is&time=201612271840&ir=true 
http://www.sat24.com/image2.ashx?region=is&time=201612271910&ir=true 

は勿論sat24ページから各地域/国抽出した日時にdpending:

だから、たとえば、URI文字列型や文字列のリストタイプのリストの最初の10 indexs中のようなものになります。

次に、画像をダウンロードするためのリストの作成が完了しました。たとえば、http://www.sat24.com/image2.ashx?region=is&time=201612271910&ir=trueの各リンクをダウンロードしてイメージとして保存する必要があります。

+3

を動作することを示す.Net Fiddleを作成しました。 – SLaks

答えて

3

これは、agility packを使用してhtmlドキュメントから情報を抽出する例です。

using System; 
using System.Linq; 
using System.IO; 
using System.Xml; 
using System.Net; 
using HtmlAgilityPack; 

public class Program 
{ 
    public static void Main() 
    { 
     var wc = new WebClient(); 
     wc.BaseAddress = "http://sat24.com/"; 
     HtmlDocument doc = new HtmlDocument(); 

     var temp = wc.DownloadData("/en"); 
     doc.Load(new MemoryStream(temp));  

     var secTokenScript = doc.DocumentNode.Descendants() 
      .Where(e => 
        String.Compare(e.Name, "script", true) == 0 && 
        String.Compare(e.ParentNode.Name, "div", true) == 0 && 
        e.InnerText.Length > 0 && 
        e.InnerText.Trim().StartsWith("var region") 
       ).FirstOrDefault().InnerText; 
     var securityToken = secTokenScript; 
     securityToken = securityToken.Substring(0, securityToken.IndexOf("arrayImageTimes.push")); 
     securityToken = secTokenScript.Substring(securityToken.Length).Replace("arrayImageTimes.push('", "").Replace("')", ""); 
     var dates = securityToken.Trim().Split(new string[] { ";"}, StringSplitOptions.RemoveEmptyEntries); 
     var scriptDates = dates.Select(x => new ScriptDate { DateString = x }); 
     foreach(var date in scriptDates) 
     { 
      Console.WriteLine("Date String: '" + date.DateString + "'\tYear: '" + date.Year + "'\t Month: '" + date.Month + "'\t Day: '" + date.Day + "'\t Hours: '" + date.Hours + "'\t Minutes: '" + date.Minutes + "'"); 
     } 

    } 


    public class ScriptDate 
    { 
     public string DateString {get;set;} 
     public int Year 
     { 
      get 
      { 
       return Convert.ToInt32(this.DateString.Substring(0, 4)); 
      } 
     } 
     public int Month 
     { 
      get 
      { 
       return Convert.ToInt32(this.DateString.Substring(4, 2)); 
      } 
     } 
     public int Day 
     { 
      get 
      { 
       return Convert.ToInt32(this.DateString.Substring(6, 2)); 
      } 
     } 
     public int Hours 
     { 
      get 
      { 
       return Convert.ToInt32(this.DateString.Substring(8, 2)); 
      } 
     } 
     public int Minutes 
     { 
      get 
      { 
       return Convert.ToInt32(this.DateString.Substring(10, 2)); 
      } 
     } 




    } 


} 

また、私は、これはあなたがHTML敏捷性パックを使用する必要があります

関連する問題