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


此系列博文鏈接

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

C#爬蟲

在開頭貼一下github倉庫地址,代碼都放在上面.有需要可以參考. 倉庫地址

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

     public static string SetUrlParameters(string url, Dictionary<string, string> parameters)
    {
        string result = url;
    
    if (parameters.Count &gt; 0)
    {
        result += &quot;?&quot;;
        foreach (KeyValuePair&lt;string, string&gt; keyValuePair in parameters)
        {
            result = string.Format(&quot;{0}{1}={2}&amp;&quot;, result, keyValuePair.Key,
                keyValuePair.Value);
        }
    
        result = result.TrimEnd(&apos;&amp;&apos;);
    }
    
    return result;
    

    }

  2. 編寫代碼
    根據習慣還是分了三層(捂臉),項目目錄結構:

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

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

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

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

下面還有PowerBI部分

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

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

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

PowerBI確實很強大哦,微軟爸爸的技術很牛逼,看了下PowerBI里還有一個叫多行卡的圖表控件,用它做個表,以后買手機再也不用糾結了.拖幾個字段進去,然后可以利用字段篩選滿足自己要求的手機.

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

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

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

可以很直觀的看到華為的價格是最貴的.

總結

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

  </div>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM