csharp:正则表达式采集网页数据

https://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.regex(v=vs.110).aspx

https://github.com/StackExchange/dapper-dot-net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
/// <summary>
       ///
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void StatsoneForm_Load(object sender, EventArgs e)
       {
           string s = @"<tr height='19' style='height:14.25pt;mso-height-source:userset;mso-height-alt:285;'>    <td class='xl67' height='19' style='height:14.25pt;'></td>    <td class='xl71' x:num>110000</td>    <td class='xl71' x:str>北京市</td>    <td class='xl67'></td>    <td class='xl70'></td>    <td class='xl70'></td>    <td class='xl70'></td>    <td colspan='3' style='mso-ignore:colspan;'></td>   </tr>";
           string f = ExtensionPost(s);
           MessageBox.Show(f);
           string sb = @"<p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>110000<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'>北京市</span></p>";
           string fb = ExtensionPostb(sb);
           MessageBox.Show(fb);
 
           string strhtml = @"<p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>110000<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'>北京市</span></p><p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>110100<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'>市辖区</span></p><p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>110101<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'>东城区</span></p><p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>110102<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'>西城区</span></p><p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>110105<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'>朝阳区</span></p><p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>110106<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'>丰台区</span></p>";
           IEnumerable<AreaHtmlValue> htmlValue = GetRegValue(@"<p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>(?<code>\d+)<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'>(?<name>\w*)</span></p>", strhtml);
           List<AreaInfo> areaList = (from v in htmlValue
                                     // let name = v.Name.Replace("自治区直辖县级行政区划", "县").Replace("市辖区", "市").Replace("省直辖县级行政区划", "县")
                                     // .Replace("县", "")
                                      select new AreaInfo
                                      {
                                          AreaCode = v.Code.Substring(0, 5),
                                          AreaName = v.Name,
                                          AreaFullName = v.Name,
                                          ParentAreaCode = "0",
                                          ParentId = 0,
                                          CreateTime = DateTime.Now,
                                          AreaYear = 2015
                                      }).ToList();
 
 
           this.dataGridView1.DataSource = areaList;
 
       }
       /// <summary>
       /// <tr height='19' style='height:14.25pt;mso-height-source:userset;mso-height-alt:285;'>
       /// <td class='xl67' height='19' style='height:14.25pt;'></td>
       /// <td class='xl71' x:num>654326</td>
       ///<td class='xl71' x:str><span style='mso-spacerun:yes;'>    </span><font class='font3'>吉木乃县</font></td>
       ///<td class='xl67'></td>
       ///<td class='xl70'></td>
       ///<td class='xl70'></td>
       ///<td class='xl70'></td>
       ///<td colspan='3' style='mso-ignore:colspan;'></td>
       ///</tr>
       /// </summary>
       /// <param name="url"></param>
       /// <returns></returns>
       static String ExtensionPost(String url)
       {
 
           //<tr height='19' style='height:14.25pt;mso-height-source:userset;mso-height-alt:285;'>    <td class='xl67' height='19' style='height:14.25pt;'></td>    <td class='xl71' x:num>110000</td>    <td class='xl71' x:str>北京市</td>    <td class='xl67'></td>    <td class='xl70'></td>    <td class='xl70'></td>    <td class='xl70'></td>    <td colspan='3' style='mso-ignore:colspan;'></td>   </tr>
           //<p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>110000<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'> 北京市</span></p>
 
           //<tr height='19' style='height:14.25pt;mso-height-source:userset;mso-height-alt:285;'><td class='xl67' height='19' style='height:14.25pt;'></td><td class='xl71' x:num>654326</td><td class='xl71' x:str><span style='mso-spacerun:yes;'>    </span><font class='font3'>吉木乃县</font></td><td class='xl67'></td><td class='xl70'></td><td class='xl70'></td><td class='xl70'></td><td colspan='3' style='mso-ignore:colspan;'></td></tr>
          // Regex r = new Regex(@"<tr height='19' style='height:14.25pt;mso-height-source:userset;mso-height-alt:285;'><td class='xl67' height='19' style='height:14.25pt;'></td><td class='xl71' x:num>(?<port>\d+)</td><td class='xl71' x:str><span style='mso-spacerun:yes;'>    </span><font class='font3'>(?<proto>\w+)</font></td><td class='xl67'></td><td class='xl70'></td><td class='xl70'></td><td class='xl70'></td><td colspan='3' style='mso-ignore:colspan;'></td></tr>",
           Regex r = new Regex(@"<tr height='19' style='height:14.25pt;mso-height-source:userset;mso-height-alt:285;'>    <td class='xl67' height='19' style='height:14.25pt;'></td>    <td class='xl71' x:num>(?<port>\d+)</td>    <td class='xl71' x:str>(?<proto>\w+)</td>    <td class='xl67'></td>    <td class='xl70'></td>    <td class='xl70'></td>    <td class='xl70'></td>    <td colspan='3' style='mso-ignore:colspan;'></td>   </tr>",
           RegexOptions.Compiled);
           return r.Match(url).Result("${proto}${port}");
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="url"></param>
       /// <returns></returns>
       static string ExtensionPostb(string url)
       {
           Regex r = new Regex(@"<p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>(?<port>\d+)<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'>(?<proto>\w*)</span></p>",
           RegexOptions.Compiled);
           return r.Match(url).Result("${proto}${port}");
       }
 
 
       /// <summary>
       /// http://files2.mca.gov.cn/www/201512/20151224151630189.htm
       /// <tr height="19" style='height:14.25pt;mso-height-source:userset;mso-height-alt:285;'><td class="xl67" height="19" style='height:14.25pt;'></td><td class="xl71" x:num>110000</td><td class="xl71" x:str>北京市</td><td class="xl67"></td><td class="xl70"></td><td class="xl70"></td><td class="xl70"></td><td colspan="3" style='mso-ignore:colspan;'></td></tr>
       /// http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html
       /// <p class="MsoNormal" style="line-height: 150%"><span lang="EN-US" style="line-height: 150%; font-family: 'Times New Roman', 'serif'; font-size: 12pt">110000<span>  </span></span><span style="line-height: 150%; font-family: 宋体; font-size: 12pt"> 北京市</span></p>
       /// </summary>
       /// <param name="sender"></param>
       /// <param name="e"></param>
       private void button1_Click(object sender, EventArgs e)
       {
           try
           {
               //1
               string url = "http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html";
               //2
               //string url = "http://files2.mca.gov.cn/www/201512/20151224151630189.htm";
               // 获取相关HTML块
               //IEnumerable<AreaHtmlValue> htmlValue =GetRegValue(@"<tr class='villagetr'><td>(?<code>\d{12})</td><td>(?<type>\d{3})</td><td>(?<name>\w*)</td></tr>",GetHtml(url));
               //<p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>110000<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'> 北京市</span></p>
               //1
               IEnumerable<AreaHtmlValue> htmlValue = GetRegValue(@"<p class='msonormal' style='line-height: 150%'><span lang='en-us' style='line-height: 150%; font-family: 'times new roman', 'serif'; font-size: 12pt'>(?<code>\d+)<span>  </span></span><span style='line-height: 150%; font-family: 宋体; font-size: 12pt'>(?<name>\w*)</span></p>", GetHtml(url));
               //2
               //IEnumerable<AreaHtmlValue> htmlValue = GetRegValue(@"<tr height='19' style='height:14.25pt;mso-height-source:userset;mso-height-alt:285;'><td class='xl67' height='19' style='height:14.25pt;'></td><td class='xl71' x:num>(?<code>\d+)</td><td class='xl71' x:str><span style='mso-spacerun:yes;'>    </span><font class='font3'>(?<name>\w*)</font></td><td class='xl67'></td><td class='xl70'></td><td class='xl70'></td><td class='xl70'></td><td colspan='3' style='mso-ignore:colspan;'></td></tr>", GetHtml(url));
               //this.richTextBox1.Text = GetHtml(url);
              // this.textBox1.Text = GetHtml(url);
              // this.textBox1.SelectAll();
               List<AreaInfo> areaList = (from v in htmlValue
                                          //let name = v.Name.Replace("自治区直辖县级行政区划", "县").Replace("市辖区", "市").Replace("省直辖县级行政区划", "县")
                                                 //.Replace("县", "")
                                            select new AreaInfo
                                             {
                                                 AreaCode = v.Code.Substring(0, 6),
                                                 AreaName = v.Name,
                                                 AreaFullName = v.Name,
                                                 ParentAreaCode = "0",
                                        
                                                 ParentId = 0,
                                                 CreateTime = DateTime.Now,
                                                 AreaYear = 2015
                                             }).ToList();
 
               
               this.dataGridView2.DataSource = areaList;
 
               WebClient wc = new WebClient();
              string mainData = Encoding.UTF8.GetString(wc.DownloadData(string.Format("http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html")));
              this.richTextBox2.Text =RemoveScript(RemoveStyle(ReplaceEnter(mainData)));
             // this.textBox2.Text = RemoveScript(RemoveStyle(ReplaceEnter(mainData)));
             // this.textBox2.SelectAll();
 
           }
           catch (Exception ex)
           {
               ex.Message.ToString();
           }
 
       }
       #region 网页源码
 
       /// <summary>
       ///
       /// </summary>
       /// <param name="url"></param>
       private static void updowndimg(string url)
       {
           WebClient client = new WebClient();
           string html = client.DownloadString(url);
           MatchCollection matches = Regex.Matches(html, "<img\\s*.*src=\"(.+?)\".*/>");
           for (int i = 0; i < matches.Count; i++)
           {
               string img = matches[i].Groups[1].Value.Replace("\"", string.Empty);
               img = "url/" + img;
               client.DownloadFile(img, @"c:\g\" + Path.GetFileName(img));
               Console.WriteLine(img);
           }
           Console.ReadKey();
       }
       /// <summary>
       /// 例如,Find_po在字开头处查找以"po"开头的字符串:
       /// </summary>
       static void Find_po()
       {
           string text = @" I can not find my position in Beijing ";
           string pattern = @"\bpo\S*ion\b";
           MatchCollection matches = Regex.Matches(text, pattern, RegexOptions.IgnoreCase
          | RegexOptions.IgnorePatternWhitespace | RegexOptions.ExplicitCapture);
           WriteMatches(text, matches);
       }
       /// <summary>
       ///
       /// </summary>
       /// <param name="text"></param>
       /// <param name="matches"></param>
       static void WriteMatches(string text, MatchCollection matches)
       {
           Console.WriteLine("Original text was: \n\n" + text + "\n");
           Console.WriteLine("No. of matches: " + matches.Count);
           foreach (Match nextMatch in matches)
           {
               int Index = nextMatch.Index;
               string result = nextMatch.ToString();
               int charsBefore = (Index < 5) ? Index : 5;
               int fromEnd = text.Length - Index - result.Length;
               int charsAfter = (fromEnd < 5) ? fromEnd : 5;
               int charsToDisplay = charsBefore + charsAfter + result.Length;
               Console.WriteLine("Index: {0}, \tString: {1}, \t{2}", Index, result,
               text.Substring(Index - charsBefore, charsToDisplay));
           }
       }
       /// <summary>
       /// 如,"http://www.yahoo.com.cn:8080/index.html"将返回"http:8080"。
       /// </summary>
       /// <param name="url"></param>
       /// <returns></returns>
       String Extension(String url)
       {
           Regex r = new Regex(@"^(?<proto>\w+)://[^/]+?(?<port>:\d+)?/",
           RegexOptions.Compiled);
           return r.Match(url).Result("${proto}${port}");
       }
       /// <summary>
       ///     获取远程网页源码
       /// </summary>
       /// <param name="url"></param>
       /// <returns></returns>
       private static string GetHtml(string url)
       {
           try
           {
               WebRequest webRequest = WebRequest.Create(url);
               WebResponse webResponse = webRequest.GetResponse();
               Stream reader = webResponse.GetResponseStream();
 
               if (reader != null)
               {
                   var respStreamReader = new StreamReader(reader, Encoding.UTF8); //
 
                   var cbuffer = new char[1024];
 
                   int byteRead = respStreamReader.Read(cbuffer, 0, 256);
 
                   string strBuff = string.Empty;
 
                   while (byteRead != 0)
                   {
                       var strResp = new string(cbuffer, 0, byteRead);
 
                       strBuff = strBuff + strResp;
 
                       byteRead = respStreamReader.Read(cbuffer, 0, 256);
                   }
 
                   strBuff = RemoveScript(RemoveStyle(ReplaceEnter(strBuff)));
 
                   return strBuff;
               }
           }
           catch (Exception)
           {
               AreaLogHelper.WriteLogFile("【异常URL】" + url);
               Console.WriteLine("【异常URL】" + url);
           }
 
           return string.Empty;
       }
 
       /// <summary>
       ///     替换网页中的换行和引号
       /// </summary>
       /// <param name="htmlCode">HTML源代码</param>
       /// <returns></returns>
       private static string ReplaceEnter(string htmlCode)
       {
           if (string.IsNullOrEmpty(htmlCode))
               return string.Empty;
           return htmlCode.Replace("\r\n", "").Replace("\"", "'").Replace("\n", "").Replace("\r", "").Replace("   ", "").Replace("  ", "").Replace("    ", "").Replace("   ", "").Replace(" ", "").ToLower();//.Replace("\"", "").Replace(" ", "")
       }
 
          #region private methods
           private static string RemoveComment(string input)
           {
               string result = input;
               //remove comment
               result = Regex.Replace(result, @"<!--[^-]*-->", string.Empty, RegexOptions.IgnoreCase);
               return result;
           }
           private static string RemoveStyle(string input)
           {
               string result = input;
               //remove all styles
               result = Regex.Replace(result, @"<style[^>]*?>.*?</style>", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Singleline);
               return result;
           }
           private static string RemoveScript(string input)
           {
               string result = input;
               result = Regex.Replace(result, @"<script[^>]*?>.*?</script>", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Singleline);
               result = Regex.Replace(result, @"<noscript[^>]*?>.*?</noscript>", string.Empty, RegexOptions.IgnoreCase | RegexOptions.Singleline);
               return result;
           }
           private static string RemoveTags(string input)
           {
               string result = input;
               result = result.Replace(" ", " ");
               result = result.Replace("", "\"");
               result = result.Replace("<", "<");
               result = result.Replace(">", ">");
               result = result.Replace("&", "&");
               result = result.Replace("<br>", "\r\n");
               result = Regex.Replace(result, @"<[\s\S]*?>", string.Empty, RegexOptions.IgnoreCase);
               return result;
           }
           #endregion
       /// <summary>
       ///  执行正则提取出值
       /// </summary>
       /// <param name="regexString">正则表达式</param>
       /// <param name="remoteStr">HtmlCode源代码</param>
       /// <returns></returns>
       private static IEnumerable<AreaHtmlValue> GetRegValue(string regexString, string remoteStr)
       {
           var reg = new Regex(regexString, RegexOptions.Compiled);//RegexOptions.Compiled
           MatchCollection mc = reg.Matches(remoteStr);
 
           return (from Match m in mc
                   select new AreaHtmlValue
                   {
                       Code = m.Groups["code"].Value,
                       Name = m.Groups["name"].Value,
                      // Type = m.Groups["type"].Value
                   }).ToList();
       }
 
       private class AreaHtmlValue
       {
           public string Code { get; set; }
           public string Name { get; set; }
 
           public string Type { get; set; }
       }
 
       #endregion
 
   }

  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
IF EXISTS (select * from sysobjects where id = object_id(N'[dbo].AreasList') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
DROP TABLE AreasList
GO
CREATE TABLE [AreasList]
(
    [AreaId] INT IDENTITY(1,1) PRIMARY KEY,
    [AreaCode] nvarchar(50) NOT NULL,
    [AreaName] nvarchar(50) NOT NULL,
    [AreaFullName] nvarchar(250) NULL,
    [ParentAreaCode] nvarchar(50) NULL,
    [ParentId] INT NULL,
    [AreaType] nvarchar(10) NULL,
    [AreaYear] INT NOT NULL--年份版本
    [CreateTime] datetime NOT NULL DEFAULT (getdate())
)
GO
--描述
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'区域table' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'区域id' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList', @level2type=N'COLUMN',@level2name=N'AreaId'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'区域标识' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList', @level2type=N'COLUMN',@level2name=N'AreaCode'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'区域名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList', @level2type=N'COLUMN',@level2name=N'AreaName'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'区域全称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList', @level2type=N'COLUMN',@level2name=N'AreaFullName'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'父级标识' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList', @level2type=N'COLUMN',@level2name=N'ParentAreaCode'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'父级id' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList', @level2type=N'COLUMN',@level2name=N'ParentId'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'城乡分类 (111:主城区、112:城乡结合区、121:镇中心区、122:镇乡结合区、123:特殊区域、210:乡中心区、220:村庄)' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList', @level2type=N'COLUMN',@level2name=N'AreaType'
GO
--sp_updateextendedproperty
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'版本年份' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList', @level2type=N'COLUMN',@level2name=N'AreaYear'
GO
EXEC sys.sp_updateextendedproperty @name=N'MS_Description', @value=N'版本年份' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList', @level2type=N'COLUMN',@level2name=N'AreaYear'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'创建时间' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'AreasList', @level2type=N'COLUMN',@level2name=N'CreateTime'
GO
 
SELECT  * FROM [AreasList]
SELECT TOP 50 * FROM [AreasList]
IF  ParentAreaCode='11'
SELECT AreaId FROM AreasList WHERE AreaCode='11'
--ParentId
SELECT * FROM AreasList WHERE ParentAreaCode='11'
---SQL Server遍历表345509
 
DECLARE @tempId INT,@tempName VARCHAR(100),@tempcount INT,@id INT,@ParentAreaCode VARCHAR(50),@parentId INT,@areaid INT
set @tempcount=(select COUNT(*) from AreasList) 
SET @id=709245
WHILE EXISTS ( SELECT   AreaId FROM     AreasList)
    BEGIN
        SET ROWCOUNT @id
        IF @id=709253
           BREAK
        SELECT  @tempId = AreaId ,
                @tempName = AreaName,
                @ParentAreaCode=ParentAreaCode
        FROM    AreasList 
        SET ROWCOUNT 0 
        --
        SELECT @areaid=AreaId FROM AreasList WHERE AreaCode=@ParentAreaCode
        IF @ParentAreaCode IS NOT NULL OR @ParentAreaCode<>''
        BEGIN
            SET @parentId=@areaid
            --更新父节点
            UPDATE AreasList SET ParentId=@parentId WHERE AreaId=@tempId   
        END
        PRINT 'Name:----' +CAST(@tempId AS VARCHAR(20))+ @tempName+'parentId'+STR(@parentId)
        set @id=@id+1;
END
 
 
SELECT * FROM dbo.AreasList WHERE ParentAreaCode IS NULL
UPDATE AreasList SET ParentId=null WHERE ParentAreaCode IS NULL
 
UPDATE AreasList SET ParentId=null WHERE AreaId=709250
UPDATE AreasList SET ParentId=null WHERE AreaId=709251
UPDATE AreasList SET ParentId=null WHERE AreaId=709252
--
DECLARE @tempId INT,@tempName VARCHAR(100),@tempcount INT,@id INT
set @tempcount=(select COUNT(*) from AreasList) 
SET @id=1
WHILE EXISTS ( SELECT   AreaId FROM     AreasList)
    BEGIN
        SET ROWCOUNT @id
        SELECT  @tempId = AreaId ,
                @tempName = AreaName
        FROM    AreasList 
        SET ROWCOUNT 0 
--delete from @temp where AreaId = @tempId
        PRINT 'Name:----' +CAST(@tempId AS VARCHAR(20))+ @tempName 
         set @id=@id+1;
END
 
--
declare @tempId int,@tempName varchar(10) ,@tempcount int
set @tempcount=(select COUNT(*) from AreasList);
 set @tempId=0;
 while (@tempId<=@tempcount )
  begin
  set  @tempName=(select AreaName from AreasList where AreaId=@tempId); 
 print 'the id is :'+str(@tempId) +' the name is :  '+@tempName;
 set @tempId=@tempId+1;
 END
  
--打开游标
declare @tempId int,@tempName varchar(10),@ParentAreaCode VARCHAR(50),@parentId INT,@areaid INT
DECLARE test_Cursor CURSOR LOCAL FOR
SELECT AreaId,AreaName,ParentAreaCode FROM AreasList
OPEN test_Cursor
WHILE @@FETCH_STATUS = 0
    BEGIN 
        FETCH NEXT FROM test_Cursor INTO @tempId,@tempname,@ParentAreaCode
         --
        IF @ParentAreaCode IS NOT NULL OR @ParentAreaCode<>''
        BEGIN
            SELECT @areaid=AreaId FROM AreasList WHERE AreaCode=@ParentAreaCode
            SET @parentId=@areaid
            --更新父节点
             --UPDATE AreasList SET ParentId=@parentId WHERE AreaId=@tempId  
            UPDATE AreasList SET ParentId=@parentId WHERE AreaId=@tempId
         END                
        PRINT 'Name:----'  +str(@tempId)+ @tempName+'parentId'+STR(@parentId) 
    END
CLOSE test_Cursor
DEALLOCATE test_Cursor

  

https://maps.googleapis.com/maps/api/geocode/json?address=Winnetka&key=YOUR_API_KEY
https://maps.googleapis.com/maps/api/geocode/json?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY
https://maps.googleapis.com/maps/api/geocode/xml?address=1600+Amphitheatre+Parkway,+Mountain+View,+CA&key=YOUR_API_KEY
https://maps.googleapis.com/maps/api/geocode/json?address=Winnetka&bounds=34.172684,-118.604794|34.236144,-118.500938&key=YOUR_API_KEY

http://restapi.amap.com/v3/geocode/geo?parameters
http://restapi.amap.com/v3/geocode/regeo?parameters

http://lbs.amap.com/api/webservice/reference/georegeo/
http://restapi.amap.com/v3/geocode/regeo?output=xml&location=116.310003,39.991957&key=<用户的key>&radius=1000&extensions=all
http://restapi.amap.com/v3/geocode/geo?address=北京市朝阳区阜通东大街6号&output=xml&key=<用户的key>

http://lbsyun.baidu.com/index.php?title=webapi/ip-api
http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding

http://api.map.baidu.com/geocoder/v2/?ak=<用户的key>&callback=renderReverse&location=39.983424,116.322987&output=json&pois=1
http://api.map.baidu.com/geocoder/v2/?ak=<用户的key>&callback=renderReverse&location=39.983424,116.322987&output=xml&pois=1

 

 

https://www.microsoft.com/maps/choose-your-bing-maps-API.aspx

https://developer.yahoo.com/maps/flash/jsGettingStarted.html

http://www.bing.com/dev/en-us/dev-center

https://msdn.microsoft.com/en-us/library/gg427610.aspx

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//1.省未显示
            List<AreaInfo> areaList2 = (from v in htmlValue1
                                        let name = v.Name.Replace("自治区直辖县级行政区划", "县").Replace("市辖区", "市").Replace("省直辖县级行政区划", "县")
                                        .Replace("县", "")
                                        select new AreaInfo
                                        {
                                            AreaCode = v.Code.Substring(0, 6),
                                            AreaName = v.Name,
                                            AreaFullName = v.Name,
                                            ParentAreaCode = "0",
                                            ParentId = 0,
                                            CreateTime = DateTime.Now,
                                            AreaYear = ye
                                        }).ToList();
            //
            List<AreaInfo> areaList4 = (from v in htmlValue4
                                        let name = v.Name.Replace("自治区直辖县级行政区划", "县").Replace("市辖区", "市").Replace("省直辖县级行政区划", "县")
                                        .Replace("县", "")
                                        select new AreaInfo
                                        {
                                            AreaCode = v.Code.Substring(0, 6),
                                            AreaName = v.Name,
                                            AreaFullName = v.Name,
                                            ParentAreaCode = "0",
                                            ParentId = 0,
                                            CreateTime = DateTime.Now,
                                            AreaYear = ye
                                        }).ToList();
            //
            List<AreaInfo> areaList = (from v in htmlValue
                                       let name = v.Name.Replace("自治区直辖县级行政区划", "县").Replace("市辖区", "市").Replace("省直辖县级行政区划", "县")
                                       .Replace("县", "")
                                       select new AreaInfo
                                       {
                                           AreaCode = v.Code.Substring(0, 6),
                                           AreaName = v.Name,
                                           AreaFullName = v.Name,
                                           ParentAreaCode = "0",
                                           ParentId = 0,
                                           CreateTime = DateTime.Now,
                                           AreaYear = ye
                                       }).ToList();
 
            List<AreaInfo> areaList3 = (from v in htmlValue2
                                        let name = v.Name.Replace("自治区直辖县级行政区划", "县").Replace("市辖区", "市").Replace("省直辖县级行政区划", "县")
                                        .Replace("县", "")
                                        select new AreaInfo
                                        {
                                            AreaCode = v.Code.Substring(0, 6),
                                            AreaName = v.Name,
                                            AreaFullName = v.Name,
                                         //
                                         ParentAreaCode = "0",
                                            ParentId = 0,
                                            CreateTime = DateTime.Now,
                                            AreaYear = ye
                                        }).ToList();
 
 
 
 
            //Concat保留重复项  Union 剔除重复项
           List<AreaInfo> Result = areaList.Concat(areaList3).ToList <AreaInfo>();
           Result = Result.Concat(areaList2).ToList<AreaInfo>();
           Result = Result.Concat(areaList4).ToList<AreaInfo>();
 
           ///升序 
           List<AreaInfo> listArea1 = Result.OrderBy(s => s.AreaCode).ToList<AreaInfo>();
           //降序 
           List<AreaInfo> listArea2 = Result.OrderByDescending(s => s.AreaCode).ToList<AreaInfo>();
           //Linq排序方式 
           List<AreaInfo> listArea3 = (from c in Result
                                           orderby c.AreaCode ascending//ascending  descending
                                           select c).ToList<AreaInfo>(); 

  

posted @   ®Geovin Du Dream Park™  阅读(1718)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示