此系列博文鏈接
TODO:
EF6中基本認識.
EF6操作mysql
MySQL亂碼問題
C#爬蟲
在開頭貼一下github倉庫地址,代碼都放在上面.有需要可以參考. 倉庫地址
-
分析網站,抓包
這部分還算簡單,用谷歌自帶的開發者工具查看請求頭參數等信息
搜索商品基本的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 > 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;
}
-
編寫代碼
根據習慣還是分了三層(捂臉),項目目錄結構:
這里遇到的問題是在用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>