全国各地号码段采集工具

话不多说,先上图  

最新在写一个项目,需要通过IP生成IP所在地对应的号码,大体的业务逻辑就是根据IP获取到对应的城市,根据城市找到号码段,然后生成随机号码,代码比较乱,仅供参考!

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
static void Main(string[] args)
        {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("========================================华少号码段维护工具=================================");
            var filePath = Path.Combine(Directory.GetCurrentDirectory(), "phone.dic");
            if (File.Exists(filePath))
            {
                Console.ForegroundColor = ConsoleColor.Gray;
                Console.WriteLine("字典存在已经存在,如需重建,请删除Phone.dic然后重新打开程序!");
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Yellow;
                Console.Write("字典文件不存在,回复Y建立字典(不区分大小写):");
                var key = Console.ReadLine();
                if (key.ToLower() == "y")
                {
                    Console.ForegroundColor = ConsoleColor.Blue;
                    Console.WriteLine("建立中,建立完成后需要重启网站才可运用最新字典,时间较长,请耐心等待!");
                    Dictionary<string, HashSet<string>> directory = new Dictionary<string, HashSet<string>>();
                    var http = new HttpClient();
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    var html = new HttpHelper().GetHtml(new HttpItem { URL = "http://www.hiphop8.com/all.html" }).Html;
                    Console.Write("正在获取城市数据.......");
                    var matchResult = Regex.Matches(html, "<LI><A href=\"(http://www.hiphop8.com/city/[\\s\\S]+?\\.php)\" target=_blank>([^<]+?)</A>[\\s\\S]+?</LI>");
                    Console.WriteLine("共获取到" + matchResult.Count + "个城市,准备获取号码段......");
                    for (int i = 0; i < matchResult.Count; i++)
                    {
                        var cityMatch = matchResult[i];
                        Console.ForegroundColor = ConsoleColor.Cyan;
                        var city = cityMatch.Groups[2].Value;
                        var url = cityMatch.Groups[1].Value;
                        Console.Write($"正在获取【{city}】的号码段数据>>>>>>>>>>");
                        try
                        {
                            var cityHtml = http.GetStringAsync(url).Result;
                            var cityMatchs = Regex.Matches(cityHtml, "(\\d+?).html");
                            var numberSet = new HashSet<string>();
                            foreach (Match item in cityMatchs)
                            {
                                numberSet.Add(item.Groups[1].Value);
                            }
                            directory[city + "市"] = numberSet;
                            Console.Write($"【{city}】号码段获取完成,共获取到【{numberSet.Count}】个号码段>>>>>>>>>>");
 
                        }
                        catch (Exception ex)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.Write($"Error:【{city}】号码段获取失败【{ex.Message}】>>>>>>>>>>");
                        }
                        Console.ForegroundColor = ConsoleColor.Yellow;
                        Console.WriteLine($"当前【{i+1}】---总共【{matchResult.Count}】,休眠5秒");
                        Thread.Sleep(5000);
                    }
                    var jsonStr = Newtonsoft.Json.JsonConvert.SerializeObject(directory);
                    File.WriteAllText(filePath,jsonStr);
                    Console.WriteLine("获取完成,保存成功!");
                }
                else
                {
                    Console.WriteLine("用户取消!");
                }
            }
            Console.ReadLine();
        }

 刚开始准备用AngleSharp来解析HTML获取号码段的,后来发现还是正则好使!本人一直专注于营销软件开发,欢迎有共同爱好的朋友加好友一起交流。

 

posted @   大壮他哥  阅读(684)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
点击右上角即可分享
微信分享提示