前言

  • 最近闲来无事,又正好在学习Python数据分析统计,于是便萌生一种想法:统计京东购买记录,分析全国女性平均Size

准备工作

  • 首先查询京东网站,输入查询内容xz,查到87万+商品
  • 购买size可以在评论区找到(就摆在那儿,那也太简单了,后面才知道我想多了。。。)
  • 先看域名,发现每一个域名的构成都是https://item.jd.com/然后加一串数字.html,经验告诉我,这串数字一定是商品id。
  • 找id的话就要到搜索页面找了,果然,在分析搜索页面之后,发现id就躺在静态页面中。
  • 思路有了,准备写代码。。。

开始码代码

  • 第一步当然是获取id了,通过分析搜索域名(不得不说jd的反爬机制,唉,这里不好评价,自行体会,分析过程如下。)
  • 需要注意的就是keyword,wq(全拼),还有后面的page和s,这几个参数是改变的

keyword传入商品名称,wq传入商品全拼,page传入商品页(jd是按照奇数排序),s的话,需要计算,见代码。

#爬取商品id
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:75.0) Gecko/20100101 Firefox/75.0'}
def get_id(key_word,wq):#jd_url='https://search.jd.com/Search?keyword=%E5%A5%B3%E6%80%A7%E5%86%85%E8%A1%A3&enc=utf-8&wq=%E5%A5%B3%E6%80%A7nei%27yi&pvid=fafd7af082734ae1a4a6cb674f98b2e4'jd_url = 'https://search.jd.com/Search'product_ids = []# 爬前3页的商品j = 51;for i in range(17,25,2):param = {'keyword': key_word, 'enc': 'utf-8', 'qrst':'1', 'rt':1, 'stop':1, 'vt':2, 'wq':wq, 'page':i, 's':j, 'click':0}response = requests.get(jd_url,params = param,headers=headers)# 商品idids = re.findall('data-pid="(.*?)"', response.text,re.S)product_ids += idsif i!= 3:j = j+50+i-4;else:j+=50return product_ids
  • 获取id之后我们进入页面,准备获取评价里的购买尺寸,用静态网站方法爬一下,正则表达式分析一手,发现根本无法获得购买尺寸,再一看,获取的html页面中根本没有评价内容,经验告诉我这是通过json接口传入的。
  • 于是,就开始了我的找接口。。。。(此处省略两个小时)
  • 在我的不懈努力下,终于找到了接口。。。
  • 下面分析接口url(也不难)。
    - 分析并不难,直接上代码,这次没有用params的参数,而是用的字符串拼接,因为params一直报错,搞了好久。
#爬取Size
def getSizes(ids):Sizes = []for id in ids:for i in range(0,8):url = 'https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId='+id+'&score=0&sortType=5&page='+str(i)+'&pageSize=10&isShadowSku=0&fold=1'response = requests.get(url)size = re.findall('"productSize":"(.*?)"',response.text)Sizes+=sizereturn Sizes
  • 爬取Size后,发现Size并不统一,有的用XXL,有的用ABC,所以需要清洗一下获取的数据,如下
#数据清洗(统一尺码)
def unified(str):if 'E' in str:return 'E'if 'D' in str:return 'D'if 'C' in str:return 'C'if 'B' in str:return 'B'if 'A' in str:return 'A'if 'XXL' in str:return 'E'if 'XL' in str:return 'D'if 'L' in str:return 'C'if 'M' in str:return 'B'if 'S' in str:return 'A'if '均码' in str:return 'B'if '大' in str:return 'C'if '小' in str:return 'A'
  • 搞定这一切后,想要对Size进行分析,但是我感觉直接在PyCharm里面分析有点难看,好吧,主要是想用上最近学的juty notebook。于是我便把获取到的数据先写入MySQL,再转到juty notebook进行分析。
#运行并写入数据库
conn = pymysql.connect(host='localhost',user='root',password='123',database='size',port=3306) #连接数据库
cursor = conn.cursor()
ids = get_id("胸罩","xiong'zhao") #获取id
Sizes = getSizes(ids) #获取sizes
Sizes_flush = []
for size in Sizes:  #清洗Sizesif unified(size) is not None:Sizes_flush+=unified(size)sql = "INSERT INTO jd_size(size) values('" + unified(size) + "');"cursor.execute(sql)  #入库conn.commit()

开始分析

  • 首先连接数据库并读入数据
  • 然后对获取到的数据进行分类汇总
  • 汇总之后就明显可以看出来,B占大多数了,然后开始绘制一下饼图。
  • 果然,B占一半以上,接下来再绘制一下直方图。

很直观是不是?最后送大家一套2020最有趣的Pyhon项目实战视频教程,点我进来获取,跟着练习下,希望大家一起进步哦!

至此,我们的分析项目就完成了,经统计,全国女性大多为B杯。

完整项目代码见https://github.com/lrffun/My_Python/tree/master/Size

记一次用Python统计全国女性Size相关推荐

  1. python统计词频_Python统计四六级考试的词频

    Python统计四六级考试的词频 此文首发于公众号 「Python知识圈」, 欢迎直接去公众号查看 阅读文本大概需要 4.6 分钟. 今天是教师节,先祝天下所有老师教师节快乐,感谢您在我学生时代对我的 ...

  2. python身份证号掩盖出生日期的代码_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...

    大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...

  3. 前端白屏问题_记一次白屏统计与修理

    记一次白屏统计与修复 博文原地址 白屏来源 上一版部门用的前端结构是python || lua渲染的html页面 + seajs + js模板 + less,但是这种情况发现对应不懂服务端渲染页面,或 ...

  4. 基于 Python 的全国空气质量监测与可视化分析平台

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目背景 空气质量优劣程度与一个城市的综合竞争力密切相关,它直接影响到投资环境和居民健康,因此越来越受到政府和 ...

  5. python统计文件中每个单词出现的次数_Python统计单词出现的次数

    题目: 统计一个文件中每个单词出现的次数,列出出现频率最多的5个单词. 前言: 这道题在实际应用场景中使用比较广泛,比如统计历年来四六级考试中出现的高频词汇,记得李笑来就利用他的编程技能出版过一本背单 ...

  6. python身份证验证系统_利用Python制作全国身份证号验证及查询系统!就问你吊不吊!...

    大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及 ...

  7. 用python制作全国身份证号验证及查询系统

    ​ 大家好哇,又是一个愉快的周末,今天本鸟给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性 ...

  8. 【趣味案例】用python制作全国身份证号验证及查询系统

    今天给大家分享1个有趣的实战项目,用python制作"全国身份证号验证及查询系统",成品界面如下图: 本系统可以实现身份证号真伪验证,年龄.性别及发证地查询,看起来是不是很高大上, ...

  9. python统计字母空格个数_python统计字母、空格、数字等字符个数的实例

    如下所示: # -*- coding: utf-8 -*- # 要求:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. def count(s): count_a=count_z=c ...

  10. python统计元素个数_python怎么统计列表中元素的个数

    python统计列表中元素的个数的方法:可以通过count()方法来实现.该方法可以统计字符串中某个字符出现的次数,并返回子字符串在字符串中出现的次数.具体用法如:[count=List.count( ...

最新文章

  1. 强化学习到底是什么,它如何运作?
  2. MmGetSystemRoutineAddress和MiFindExportedRoutineByName函数的实现代码
  3. 图解LanHelper 使用
  4. ant build里如何指定classpath
  5. Java中局部变量必须初始化
  6. mysql sum带条件_mysql – SUM()基于SELECT的不同条件
  7. 成功解决Could not fetch URL https://pypi.tuna.tsinghua.edu.cn/simple/xx/: There was a problem confirming
  8. HCIE RS 2019.11.05面试战报
  9. 比Redis快50倍的中间件,为啥这么快?
  10. Vista下将Area效果应用到整个窗体
  11. python小结_Python小结
  12. 参考计算机科学导论的毕业论文,计算机学科导论论文
  13. unittest模块:单元测试
  14. 深度学习笔记---多尺度网络结构归类总结
  15. python身份验证(身份证号中提取出生日期及性别)。
  16. 内网穿透(详细且免费)部署
  17. 获取网络图片或本地图片的长宽的方法
  18. 数学建模算法与应用【BP神经网络算法】
  19. ecshop文件结构
  20. Mysql多表关联时因关联字段类型不一致导致索引失效及查询错误

热门文章

  1. LS1046A平台 网卡混杂模式,无法收到DMAC不是自己的包
  2. VLAN间的三层通信
  3. latch mysql_Latch导致MySQL Crash
  4. deprecate(反对) 关于依赖版本低的问题
  5. 在线apt-get安装mysql_apt-get安装mysql
  6. MYSQL排序加分页报错Out of sort memory, consider increasing server sort buffer size
  7. 笑晕,小米新logo是这么来的
  8. JAVA-day09-多线程
  9. windows下使用HHKB键盘,配置autohotkey键位映射
  10. 华三交换机升级的ipe文件_H3C 交换机升级说明