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用起来没那么爽>唉,仍是本身比较菜吧(捂脸),好在最后问题解决了.

相关文章
相关标签/搜索