此系列博文链接

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>

C#爬取京东手机数据+PowerBI数据可视化展示的更多相关文章

  1. Java实现爬取京东手机数据

    Java实现爬取京东手机数据 最近看了某马的Java爬虫视频,看完后自己上手操作了下,基本达到了爬数据的要求,HTML页面源码也刚好复习了下,之前发布两篇关于简单爬虫的文章,也刚好用得上.项目没什么太 ...

  2. python 爬取京东手机图

    初学urllib,高手勿喷... import re import urllib.request #函数:每一页抓取的30张图片 def craw(url,page): imagelist = []# ...

  3. Python 爬虫-爬取京东手机页面的图片

    具体代码如下: __author__ = 'Fred Zhao' import requests from bs4 import BeautifulSoup import os from urllib ...

  4. python3[爬虫实战] 使用selenium,xpath爬取京东手机

    使用selenium ,可能感觉用的并不是很深刻吧,可能是用scrapy用多了的缘故吧.不过selenium确实强大,很多反爬虫的都可以用selenium来解决掉吧. 思路: 入口: 关键字搜索入口 ...

  5. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

  6. Python爬虫实战(2):爬取京东商品列表

    1,引言 在上一篇<Python爬虫实战:爬取Drupal论坛帖子列表>,爬取了一个用Drupal做的论坛,是静态页面,抓取比较容易,即使直接解析html源文件都可以抓取到需要的内容.相反 ...

  7. 用scrapy爬取京东的数据

    本文目的是使用scrapy爬取京东上所有的手机数据,并将数据保存到MongoDB中. 一.项目介绍 主要目标 1.使用scrapy爬取京东上所有的手机数据 2.将爬取的数据存储到MongoDB 环境 ...

  8. webMagic+RabbitMQ+ES爬取京东建材数据

    本次爬虫所要爬取的数据为京东建材数据,在爬取京东的过程中,发现京东并没有做反爬虫动作,所以爬取的过程还是比较顺利的. 为什么要用WebMagic: WebMagic作为一款轻量级的Java爬虫框架,可 ...

  9. Scrapy实战篇(八)之Scrapy对接selenium爬取京东商城商品数据

    本篇目标:我们以爬取京东商城商品数据为例,展示Scrapy框架对接selenium爬取京东商城商品数据. 背景: 京东商城页面为js动态加载页面,直接使用request请求,无法得到我们想要的商品数据 ...

随机推荐

  1. Python Numpy中transpose()函数的使用

    在Numpy对矩阵的转置中,我们可以用transpose()函数来处理. 这个函数的运行是非常反常理的,可能会令人陷入思维误区. 假设有这样那个一个三维数组(2*4*2): array ([[[ 0, ...

  2. fastcgi 环境变量例子

    例如请求的url http://172.28.250.184:8099/aa.php?var=ccccc&value=bbbbbb 前两个字节分别代表  变量名长度  和 变量值长度. 0x0 ...

  3. IOS初级:NSUserDefaults

    NSUserDefaults(偏好设置),一个APP对应一个偏好设置 保存/新增数据 //存储数据 NSUserDefaults *defaults = [NSUserDefaults standar ...

  4. 提升HTML5的性能体验系列之一 避免切页白屏

    窗体切换白屏的现实问题 HTML5的性能比原生差很多,比如切页时白屏.列表滚动不流畅.下拉刷新和上拉翻页卡顿.在低端Android手机上,很多原生App常用的功能和体验效果都很难使用HTML5技术模拟 ...

  5. 求先序排列(NOIP2001&NOIP水题测试(2017082301))

    题目链接:求先序排列 这道题讲白了,就是数的构造,然后遍历. 思路大致是这样: 我们先通过后序遍历,找到当前区间的根,然后在中序遍历中找到根对应的下标,然后就可以分出左右子树,建立当前根与左右子树根的 ...

  6. 再读c++primer plus 003

    1.如果函数返回一个结构而不是一个指向结构的引用,将把整个结构复制到一个临时位置,再将这个拷贝复制给dup.但在返回值为引用时,将直接复制给变量,其效率更高. 2.返回引用时最重要的一点是,应避免返回 ...

  7. Lecture2

    共生矩阵:

  8. 2019.01.23 hdu3377 Plan(轮廓线dp)

    传送门 题意简述:给一个n*m的带权矩阵,求从左上角走到右下角的最大分数,每个格子只能经过最多一次,n,m≤9n,m\le9n,m≤9. 思路: 考虑轮廓线dpdpdp,但这道题并没有出现回路的限制因 ...

  9. 2018.11.04 洛谷P2679 子串(线性dp)

    传送门 为什么前几年的noipnoipnoip总是出这种送分题啊? 这个直接线性dpdpdp不就完了吗? f[i][j][k][0/1]f[i][j][k][0/1]f[i][j][k][0/1]表示 ...

  10. DevOps:软件架构师行动指南(文摘)

    第一部分 背景 第1章 DevOps是什么 第二部分 部署流水线 第三部分 横切关注点 第四部分 案例研究 第五部分 走向未来