親手擼碼,爬取 手機號碼歸屬地最新數據(201911)

来源:https://www.cnblogs.com/im531/archive/2019/11/14/11858017.html
-Advertisement-
Play Games

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


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

 

 

 

於是某度搜索 手機號碼歸屬地最新資料庫 排名第一的居然是園子里的高手,瞬間興奮起來,

 

 


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

 

 

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

 

 

 

開始擼碼【抱歉,數據源和數據入庫 畫面請各位小伙伴自行腦補】:

private static List<string> MobileList = new List<string>();
// 中途中斷後, 已經存在的手機號段列表
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();
// 從手機前3位 130 開始 至 199 結束
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());

開始獲取數據

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; //已經存在的號碼
        int code = new Random().Next(1000, 9999); // 隨機手機號碼最後4位
        string mobile = $"{i}{code}";
        //獲取數據 【抱歉,數據來源畫面請各位小伙伴自行腦補】
        ModelMobile model = Get1(mobile); // 數據源1
        if (!model.QueryResult || string.IsNullOrWhiteSpace(model.Province)) model = Get2(mobile); // 數據源2
        if (!model.QueryResult || string.IsNullOrWhiteSpace(model.Province)) model = Get3(mobile); // 數據源3
        if (!model.QueryResult || string.IsNullOrWhiteSpace(model.Province)) model = Get4(mobile); // 數據源4
        //獲取成功後入庫【入庫畫面請各位小伙伴自行腦補】
        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}] ......");
    }
}

運行效果:

 

爬完所有號段後,數據總 442245 條,比某度排第一園子里的高手還要多。

 

 

 

只要源數據正常,這庫還可以一直正常升級。
擼碼完成,敢快去通知小姐姐,已經可以正常調用了。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1、埠轉發 在虛擬機設置各個資料庫對應的埠轉發 2、修改資料庫配置文件 預設只有本機的IP才可以訪問,其它IP就連不上了,修改bind ip 為0.0.0.0 3、重啟服務(或者直接重啟虛擬機) service mongodb restart ...
  • 常用的高級程式設計語言 常用的高級程式設計語言 語言 特點 FORTRAN 數值計算 COBOL 事務處理 PASCAL 結構化程式設計 LISP 函數式程式設計 PROLOG 邏輯程式設計 C 系統程式設計 Smalltalk 面向對象程式設計 Java Internet應用,可移植性 Pytho ...
  • Lambda表達式 :也可稱為閉包,Lambda允許把函數作為一個方法的參數(函數作為參數傳遞到方法中),免去了使用匿名方法的麻煩,並且給予Java簡單但是強大的函數化的編程能力 ...
  • 對於MySQL而言,其實分為客戶端與服務端。 服務端,就是MySQL應用,當我們使用net start mysql命令啟動的服務,其實就是啟動了MySQL的服務端。 客戶端,負責發送請求到服務端並從服務端獲取數據,客戶端可以有多種形式,可以是我們通過mysql uroot p1234打開的黑視窗,也 ...
  • 面向過程編程 面向過程編程其實是一種 機械式的思維方式 ,其核心就是 "過程" 。 過程指的是 一種解決問題的步驟 ,即先乾什麼再乾什麼,最後乾什麼。 優點 :將複雜的問題流程化,進而簡單化。 哈哈哈哈,這種時刻,話不多說,上代碼! 以上就是實現用戶註冊功能的面向過程思想的代碼的展現。這個時候,如果 ...
  • 在開發職業發展中,想要學習一門新技術,怎麼辦? 最常見的是看文檔,擼代碼,看視頻 分享幾個技術更新及時學習的網站。基本都免費。各位按需使用。 1,黑馬程式員視頻庫 http://yun.itheima.com/ 傳智播客及黑馬程式員視頻庫涵蓋了Java,人工智慧Python,前端,大數據等多方向! ...
  • 概述上篇文章分享了 Gin 框架使用 Logrus 進行日誌記錄,這篇文章分享 Gin 框架的數據綁定與驗證。有讀者咨詢我一個問題,如何讓框架的運行日誌不輸出控制台?解決方案: engine := gin.Default() //修改成如下 engine := gin.New() 我是怎麼知道的?看 ...
  • 問題 在使用自定義 Ef Core 倉儲和 ABP vNext 註入的預設倉儲時,通過兩個 Repository 進行 Join 操作,提示 。這個異常信息翻譯成中文的大概意思就是,你不能使用兩個 DbContext 裡面的 DbSet 進行 Join 查詢。 如果將自定義倉儲改為 進行註入,是可以 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:本文代碼示例演示瞭如何在WPF中使用LiveCharts庫創建動態條形圖。通過創建數據模型、ViewModel和在XAML中使用`CartesianChart`控制項,你可以輕鬆實現圖表的數據綁定和動態更新。我將通過清晰的步驟指南包括詳細的中文註釋,幫助你快速理解並應用這一功能。 先上效果: 在 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • openGauss(GaussDB ) openGauss是一款全面友好開放,攜手伙伴共同打造的企業級開源關係型資料庫。openGauss採用木蘭寬鬆許可證v2發行,提供面向多核架構的極致性能、全鏈路的業務、數據安全、基於AI的調優和高效運維的能力。openGauss深度融合華為在資料庫領域多年的研 ...
  • 概述:本示例演示了在WPF應用程式中實現多語言支持的詳細步驟。通過資源字典和數據綁定,以及使用語言管理器類,應用程式能夠在運行時動態切換語言。這種方法使得多語言支持更加靈活,便於維護,同時提供清晰的代碼結構。 在WPF中實現多語言的一種常見方法是使用資源字典和數據綁定。以下是一個詳細的步驟和示例源代 ...
  • 描述(做一個簡單的記錄): 事件(event)的本質是一個委托;(聲明一個事件: public event TestDelegate eventTest;) 委托(delegate)可以理解為一個符合某種簽名的方法類型;比如:TestDelegate委托的返回數據類型為string,參數為 int和 ...
  • 1、AOT適合場景 Aot適合工具類型的項目使用,優點禁止反編 ,第一次啟動快,業務型項目或者反射多的項目不適合用AOT AOT更新記錄: 實實在在經過實踐的AOT ORM 5.1.4.117 +支持AOT 5.1.4.123 +支持CodeFirst和非同步方法 5.1.4.129-preview1 ...
  • 總說周知,UWP 是運行在沙盒裡面的,所有許可權都有嚴格限制,和沙盒外交互也需要特殊的通道,所以從根本杜絕了 UWP 毒瘤的存在。但是實際上 UWP 只是一個應用模型,本身是沒有什麼許可權管理的,許可權管理全靠 App Container 沙盒控制,如果我們脫離了這個沙盒,UWP 就會放飛自我了。那麼有沒... ...
  • 目錄條款17:讓介面容易被正確使用,不易被誤用(Make interfaces easy to use correctly and hard to use incorrectly)限制類型和值規定能做和不能做的事提供行為一致的介面條款19:設計class猶如設計type(Treat class de ...
  • title: 從零開始:Django項目的創建與配置指南 date: 2024/5/2 18:29:33 updated: 2024/5/2 18:29:33 categories: 後端開發 tags: Django WebDev Python ORM Security Deployment Op ...
  • 1、BOM對象 BOM:Broswer object model,即瀏覽器提供我們開發者在javascript用於操作瀏覽器的對象。 1.1、window對象 視窗方法 // BOM Browser object model 瀏覽器對象模型 // js中最大的一個對象.整個瀏覽器視窗出現的所有東西都 ...