C#爬取京東手機數據+PowerBI數據可視化展現

此係列博文連接html

TODO:
EF6中基本認識.
EF6操做mysql
MySQL亂碼問題mysql

C#爬蟲

在開頭貼一下github倉庫地址,代碼都放在上面.有須要能夠參考. 倉庫地址git

  1. 分析網站,抓包
    這部分還算簡單,用谷歌自帶的開發者工具查看請求頭參數等信息
    搜索商品基本的url是:https://search.jd.com/Search.補上一些參數便可,用谷歌瀏覽器的代理,不然拿不到數據.京東對爬蟲仍是比較友好的,除了一個瀏覽器代理其餘沒啥反爬蟲的玩意兒.下面這個是RequestHeader,加上圈出來的三個便可,其餘的沒有用到
    還有幾個參數要設置一下要在url中設置一下.
    在C#中寫了個靜態方法設置url的參數:github

    public static string SetUrlParameters(string url, Dictionary<string, string> parameters)
    {
        string result = url;
    
        if (parameters.Count > 0)
        {
            result += "?";
            foreach (KeyValuePair<string, string> keyValuePair in parameters)
            {
                result = string.Format("{0}{1}={2}&", result, keyValuePair.Key,
                    keyValuePair.Value);
            }
    
            result = result.TrimEnd('&');
        }
    
        return result;
    }
  2. 編寫代碼
    根據習慣仍是分了三層(捂臉),項目目錄結構:
    sql

    這裏遇到的問題是在用entityframe6操做數據庫的時候,採用codefirst方式,生成數據庫的時候數據庫的默認編碼不是utf8,後來在數據庫鏈接字符串里加了個 Character Set=utf8,設置完以後仍是沒用,又跑到阿里雲設置了一下mysql的默認編碼方式,而後好了.具體解決會寫在另外一篇博文中.數據庫

    還有問題就是codefirst創建模型,模型之間的關係一開始沒有搞清楚,致使像數據庫寫數據的時候一直沒法寫入.一個寫了三個實體類,分別是Shop Commodity Mobile,Shop(店鋪)和Mobile(繼承自Commodity)是多對多的關係,一個店鋪能夠有多個商品,一個商品也能夠來自多個店鋪,然而我這裏並無用商品Id做爲主鍵,反而一個商品能夠出現任意次,由於考慮到分析商品價格隨時間的變化.關於EntityFramework6如何設置模型之間的關係也會在另外一篇博文呈現.
    程序運行的一個截圖:

    我大概爬了五千條左右的數據,再來數據庫的截圖
    瀏覽器

    其餘的代碼不一一贅述了,放到github上了.
    倉庫地址markdown

下面還有PowerBI部分

花了很多時間處理數據庫那邊,這部分就簡單的圖形化操做了一下,雖然拿了五千條左右的數據,還真不知道用來乾點啥(捂臉).
最直觀的是想比較同一個手機在不一樣店鋪的售價,用了個直方圖,可是效果不太理想,篩選了幾種型號的手機,惋惜京東上的手機店鋪就那麼幾家,大部分都是自營店鋪.截圖以下:
工具

而後用了一個餅圖,看了一下各個手機廠商旗下都有多少種不一樣型號的手機.感嘆一下,華爲出手機真是勤快,不看不知道一看嚇一跳,華爲手機的型號,竟然佔了將近四分之一了.其實數據未必可靠,畢竟像oppo和vivo這些廠不少機型基本只有線下才有的賣.另外能夠看到型號較少的手機美圖(偷笑),報上了小米的大腿,也算是有個善終吧,當年本身還在官網想搶購一個美圖而後加錢賣出去呢(惋惜沒搶到).
網站

看了下powerBI自帶的還有個漏斗圖,隨便拖了幾個字段進去,看一下京東上哪家店鋪賣的手機種類最多吧.能夠看到,小米自營店賣的在售的手機是最多的

PowerBI確實很強大哦,微軟爸爸的技術很牛逼,看了下PowerBI裏還有一個叫多行卡的圖表控件,用它作個表,之後買手機不再用糾結了.拖幾個字段進去,而後能夠利用字段篩選知足本身要求的手機.

上面的看了那麼多,好像還有一個最重要的就是價格尚未分析!暫時想不出什麼好的方法來分析價格,就簡單粗暴的上個折線圖吧,看看最貴的手機是誰.

本覺得蘋果手機是最貴的,沒想到華爲的保時捷版本力壓羣雄,成爲京東上最貴的手機.奇怪我記得當年這玩意兒我也在官網上搶購過(沒搶到),不是說是限量發售嗎~~.

最後實在想不出還能搞啥了,就用餅圖和柱狀圖拖了幾個字段看一下效果:

能夠很直觀的看到華爲的價格是最貴的.

總結

利用此次作的東西,鞏固了一下C#的linq的操做,以前數據庫用的比較新的efcore操做的此次用的ef6,遇到些坑,不過,Linq真是個好東西,再來一句微軟牛逼!!雖然微軟曾經也有不完美的地方,可是正在往愈來愈好的方向發展,但願中國將來也能出現像微軟這樣優秀的軟件+硬件廠商(近幾年微軟手機作的不行,surface系產品仍是不錯的,本身買了個二手的surface pro4用着仍是舒服的).此次很大一部分時間是被坑在了數據庫MySql上了,不是微軟親兒子結合ef用起來沒那麼爽>唉,仍是本身比較菜吧(捂臉),好在最後問題解決了.

相關文章
相關標籤/搜索