抢火车票利器(今年试试)
| 001 | usingSystem; | 
| 002 | usingSystem.Collections.Generic; | 
| 003 | usingSystem.Linq; | 
| 004 | usingSystem.Text; | 
| 005 | usingSystem.Net; | 
| 006 | usingSystem.ComponentModel; | 
| 007 | usingSystem.Threading; | 
| 008 | usingSystem.Text.RegularExpressions; | 
| 009 | usingSystem.Diagnostics; | 
| 010 | 
| 011 | namespaceHuoChePiao | 
| 012 | { | 
| 013 |     classProgram | 
| 014 |     { | 
| 015 |         privatestaticHashSet<string> results; | 
| 016 |         privatestaticWebClient wc; | 
| 017 |         privatestaticList<Site> sites; | 
| 018 |         privatestaticintindex; | 
| 019 |         privatestaticboolisFirstRound; | 
| 020 |          | 
| 021 |         staticvoidMain(string[] args) | 
| 022 |         { | 
| 023 |             sites = newList<Site>(); | 
| 024 |              | 
| 025 |             sites.Add(newSite() | 
| 026 |             { | 
| 027 |                 Name = "火车票网", | 
| 029 |                 RegexPattern = @"· <A href=(.*?) target=_blank>(.*?)</a>", | 
| 030 |                 Encoding = Encoding.Default | 
| 031 |             }); | 
| 032 |              | 
| 033 |             sites.Add(newSite() | 
| 034 |             { | 
| 035 |                 Name = "百姓网", | 
| 037 |                 RegexPattern = @""" ><a href=""/(.*?)"">(.*?)</a></td>", | 
| 038 |                 Encoding = Encoding.UTF8, | 
| 039 |                 Domain = "http://beijing.baixing.com/", | 
| 040 |                 Keys = newstring[] { "卧"} | 
| 041 |             }); | 
| 042 | 
| 043 |             sites.Add(newSite() | 
| 044 |             { | 
| 045 |                 Name = "百姓网", | 
| 047 |                 RegexPattern = @""" ><a href=""/(.*?)"">(.*?)</a></td>", | 
| 048 |                 Encoding = Encoding.UTF8, | 
| 049 |                 Domain = "http://beijing.baixing.com/", | 
| 050 |                 Keys = newstring[] { "卧"} | 
| 051 |             }); | 
| 052 |     | 
| 053 |             sites.Add(newSite() | 
| 054 |             { | 
| 055 |                 Name = "酷讯网", | 
| 057 |                 RegexPattern = @"<span class=""col_11 left""><a target=""_blank"" href=""(.*)"">(.*)</a>", | 
| 058 |                 Encoding = Encoding.UTF8 | 
| 059 |             }); | 
| 060 | 
| 061 |             sites.Add(newSite() | 
| 062 |             { | 
| 063 |                 Name = "酷讯网", | 
| 065 |                 RegexPattern = @"<span class=""col_11 left""><a target=""_blank"" href=""(.*)"">(.*)</a>", | 
| 066 |                 Encoding = Encoding.UTF8 | 
| 067 |             }); | 
| 068 | 
| 069 |             sites.Add(newSite() | 
| 070 |             { | 
| 071 |                 Name = "酷讯网", | 
| 073 |                 RegexPattern = @"<span class=""col_11 left""><a target=""_blank"" href=""(.*)"">(.*)</a>", | 
| 074 |                 Encoding = Encoding.UTF8 | 
| 075 |             }); | 
| 076 | 
| 077 |             sites.Add(newSite() | 
| 078 |             { | 
| 079 |                 Name = "清华网", | 
| 081 |                 RegexPattern = @"<a href=""(bbscon.php.*)"">(.*)</a>", | 
| 082 |                 Encoding = Encoding.Default, | 
| 083 |                 Domain = "http://www.newsmth.net/" | 
| 084 |             }); | 
| 085 | 
| 086 |             sites.Add(newSite() | 
| 087 |             { | 
| 088 |                 Name = "清华网", | 
| 090 |                 RegexPattern = @"<a href=""(bbscon.php.*)"">(.*)</a>", | 
| 091 |                 Encoding = Encoding.Default, | 
| 092 |                 Domain = "http://www.newsmth.net/" | 
| 093 |             }); | 
| 094 |              | 
| 095 |             results = newHashSet<string>(); | 
| 096 | 
| 097 |             isFirstRound = true; | 
| 098 | 
| 099 |             wc = newWebClient(); | 
| 100 |             wc.Encoding = sites[index].Encoding; | 
| 101 | 
| 102 |             wc.DownloadStringCompleted += newDownloadStringCompletedEventHandler(wc_DownloadStringCompleted); | 
| 103 |             wc.DownloadStringAsync(newUri(sites[index].Url)); | 
| 104 | 
| 105 |             intorder;          | 
| 106 |             while(int.TryParse(Console.ReadLine(), outorder)) | 
| 107 |             { | 
| 108 |                 OpenLink(results.ElementAt(order - 1)); | 
| 109 |                 Console.ForegroundColor = ConsoleColor.Green; | 
| 110 |             } | 
| 111 |         } | 
| 112 | 
| 113 |         staticvoidwc_DownloadStringCompleted(objectsender, DownloadStringCompletedEventArgs e) | 
| 114 |         { | 
| 115 |             inti = 0; | 
| 116 |              | 
| 117 |             MatchCollection mc = Regex.Matches(e.Result, sites[index].RegexPattern); | 
| 118 |             foreach(Match m inmc) | 
| 119 |             { | 
| 120 |                 if(m.Success) | 
| 121 |                 { | 
| 122 |                     stringresult = sites[index].Domain + m.Groups[1].Value; | 
| 123 |                     stringcontent = m.Groups[2].Value; | 
| 124 |                     if(!results.Contains(result)) | 
| 125 |                     { | 
| 126 |                         boolisContainKey = true; | 
| 127 |                         if(sites[index].Keys != null) | 
| 128 |                         { | 
| 129 |                             foreach(stringkey insites[index].Keys) | 
| 130 |                             { | 
| 131 |                                 if(!content.Contains(key)) | 
| 132 |                                 { | 
| 133 |                                     isContainKey = false; | 
| 134 |                                     break; | 
| 135 |                                 } | 
| 136 |                             } | 
| 137 |                         } | 
| 138 | 
| 139 |                         if(!isContainKey) | 
| 140 |                             continue; | 
| 141 | 
| 142 |                         results.Add(result); | 
| 143 | 
| 144 |                         Console.ForegroundColor = isFirstRound ? ConsoleColor.Gray : ConsoleColor.White; | 
| 145 | 
| 146 |                         Console.WriteLine("{0} <{1}>  {2}.  {3}", DateTime.Now.ToShortTimeString(), sites[index].Name, results.Count, m.Groups[2].Value); | 
| 147 | 
| 148 |                         if(!isFirstRound) | 
| 149 |                         { | 
| 150 |                             OpenLink(result); | 
| 151 |                         }                | 
| 152 |                     } | 
| 153 |                 } | 
| 154 | 
| 155 |                 if(i++ > sites[index].Numbers - 2) | 
| 156 |                     break; | 
| 157 |             } | 
| 158 | 
| 159 |             Thread.Sleep(1000); | 
| 160 | 
| 161 |             index = index + 1; | 
| 162 |             if(index == sites.Count) | 
| 163 |             { | 
| 164 |                 index = 0; | 
| 165 | 
| 166 |                 if(isFirstRound) | 
| 167 |                     isFirstRound = false; | 
| 168 |             } | 
| 169 | 
| 170 |             wc.Encoding = sites[index].Encoding; | 
| 171 |             wc.DownloadStringAsync(newUri(sites[index].Url)); | 
| 172 |         } | 
| 173 | 
| 174 |         staticvoidOpenLink(stringurl) | 
| 175 |         { | 
| 176 |             Process.Start(url, "_blank"); | 
| 177 |         } | 
| 178 |     } | 
| 179 | 
| 180 |     publicclassSite | 
| 181 |     { | 
| 182 |         //站点名称 | 
| 183 |         publicstringName { get; set; } | 
| 184 |         //站点的网址 | 
| 185 |         publicstringUrl { get; set; } | 
| 186 |         //正则表达式 | 
| 187 |         publicstringRegexPattern { get; set; } | 
| 188 |         //编码 | 
| 189 |         publicEncoding Encoding { get; set; } | 
| 190 |         //网站名称 | 
| 191 |         publicstringDomain { get; set; } | 
| 192 |         //包含关键字 | 
| 193 |         publicstring[] Keys { get; set; } | 
| 194 |         //取前面多少条 | 
| 195 |         publicintNumbers { get; set; } | 
| 196 | 
| 197 |         publicSite() | 
| 198 |         { | 
| 199 |             this.Numbers = 3; | 
| 200 |         } | 
| 201 |     } | 
| 202 | } | 

每年都用这个抢到票了,今天也不例外,分享给大家:
1. 里面的规则你可以自己添加,我已经写好了很多,你把网址里德车次改下就行了
2. 初始化会抓取最新的信息,但是不弹出网页,你可以在控制台输入id号,弹出对应id号的网址
3. 后面会自动循环捕获每个站点的新信息,并弹出网页
快就一个字,希望大家都能买到火车票,安心回家
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号