小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

親手?jǐn)]碼,爬取 手機(jī)號碼歸屬地最新數(shù)據(jù)(201911)

 Coder編程 2020-05-09

某天,某部門負(fù)責(zé)人小姐姐:要在訂單中識別收貨人手機(jī)號碼歸屬地,這樣可以參考判斷該客戶是否為惡意下單。
搬磚君:可以,有兩種方案;
    一、網(wǎng)上買個API接口(需要RMB支持);
    二、找個手機(jī)歸屬地庫(免費,有可能不是最新);
小姐姐:申請RMB,估計領(lǐng)導(dǎo)不會簽字,那就免費的吧。
搬磚君:好吧,(此時心中一萬個。。。(你們懂的));

 

 

 

于是某度搜索 手機(jī)號碼歸屬地最新數(shù)據(jù)庫 排名第一的居然是園子里的高手,瞬間興奮起來,

 

 


打開鏈接看到 github ,心想這下不要去擼碼找數(shù)據(jù)了。結(jié)果翻遍每個文件夾只有查詢方法,卻沒有庫。
再往下看原來庫是有 購買 鏈接,還有升級鏈接??磥磉@路走不通了。

 

 

再翻了下某度的其它搜索結(jié)果,要么不最新,要么收費,要么就是登錄需要積分下載。
心想去找個API接口把他的數(shù)據(jù)擼出來就好了。 繼續(xù)某度 手機(jī)號碼歸屬地查詢API接口 ,
經(jīng)過測試,比對,找了4個可用而且可信度比較高的。

 

 

 

開始擼碼【抱歉,數(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ù)正常,這庫還可以一直正常升級。
擼碼完成,敢快去通知小姐姐,已經(jīng)可以正常調(diào)用了。

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多