|
某天,某部門負(fù)責(zé)人小姐姐:要在訂單中識別收貨人手機(jī)號碼歸屬地,這樣可以參考判斷該客戶是否為惡意下單。
于是某度搜索 手機(jī)號碼歸屬地最新數(shù)據(jù)庫 排名第一的居然是園子里的高手,瞬間興奮起來,
再翻了下某度的其它搜索結(jié)果,要么不最新,要么收費,要么就是登錄需要積分下載。
開始擼碼【抱歉,數(shù)據(jù)源和數(shù)據(jù)入庫 畫面請各位小伙伴自行腦補(bǔ)】: private static List<string> MobileList = new List<string>();
// 中途中斷后, 已經(jīng)存在的手機(jī)號段列表
using (SqlConnection conn = new SqlConnection(ConStr))
{
if (MobileList.Count == 0)
{
string temp_sql = $"SELECT [Mobile] From [App_Mobile_20191113]";
using (SqlCommand command = new SqlCommand(temp_sql, conn))
{
command.CommandType = System.Data.CommandType.Text;
if (conn.State == ConnectionState.Closed) conn.Open();
using (SqlDataReader dreader = command.ExecuteReader())
{
while (dreader.Read())
{
MobileList.Add(dreader[0].ToString());
}
}
}
}
}
一個號碼段前三位一個線程 List<Task> taskList = new List<Task>();
TaskFactory taskFactory = new TaskFactory();
// 從手機(jī)前3位 130 開始 至 199 結(jié)束
for (int i = 130; i < 200; i++)
{
int mobile_no = i;
taskList.Add(taskFactory.StartNew(() =>
{
Console.WriteLine($"{mobile_no} = {Thread.CurrentThread.ManagedThreadId}");
Get(mobile_no);
}));
}
Task.WaitAll(taskList.ToArray());
開始獲取數(shù)據(jù) static void Get(int start_no)
{
int start_mobile = int.Parse($"{start_no}0000");
int end_mobile = int.Parse($"{start_no}9999");
// 獲取某開頭下的所有號碼段 如: 1300000 - 1309999
for (int i = start_mobile; i <= end_mobile; i++)
{
if (MobileList.Contains(i.ToString())) continue; //已經(jīng)存在的號碼
int code = new Random().Next(1000, 9999); // 隨機(jī)手機(jī)號碼最后4位
string mobile = $"{i}{code}";
//獲取數(shù)據(jù) 【抱歉,數(shù)據(jù)來源畫面請各位小伙伴自行腦補(bǔ)】
ModelMobile model = Get1(mobile); // 數(shù)據(jù)源1
if (!model.QueryResult || string.IsNullOrWhiteSpace(model.Province)) model = Get2(mobile); // 數(shù)據(jù)源2
if (!model.QueryResult || string.IsNullOrWhiteSpace(model.Province)) model = Get3(mobile); // 數(shù)據(jù)源3
if (!model.QueryResult || string.IsNullOrWhiteSpace(model.Province)) model = Get4(mobile); // 數(shù)據(jù)源4
//獲取成功后入庫【入庫畫面請各位小伙伴自行腦補(bǔ)】
if (model.QueryResult)
{
if (save_data(model))
Console.WriteLine($" {Thread.CurrentThread.ManagedThreadId}. Success \t{i} = {model.Province} {model.City} ({model.Corp}) [{model.Source}] ......");
else
Console.WriteLine($" {Thread.CurrentThread.ManagedThreadId}. SaveFail \t{i} = {model.Province} {model.City} ({model.Corp}) [{model.Source}] ......");
}
else
Console.WriteLine($" {Thread.CurrentThread.ManagedThreadId}. Fail \t{i} = {model.Message} [{model.Source}] ......");
}
}
運行效果:
爬完所有號段后,數(shù)據(jù)總 442245 條,比某度排第一園子里的高手還要多。
只要源數(shù)據(jù)正常,這庫還可以一直正常升級。
|
|
|