和女朋友看了《大赢家》,里面出来了柳岩,就和女朋友讨论了一下罩杯的问题。
女朋友说A罩杯是最流行的!优秀的人所有都是A!
我和她友好地讨论了许久!
我觉得她就是在狡辩!绝对是在狡辩!
所有我有必要来用python爬取一下中国女性的罩杯数据!
声明:我是为了证明女朋友是在狡辩!绝不是被赶出来了!!
代码如下(评论里有些照片倒是不错,改点代码就能下载了哦):、
import requests import re import time from lxml import etree def cczh(str): #定义一个尺码转换函数,不同的尺寸转换为A/B/C/D/E if 'E' in str: #如果数据中有E则: return 'E' #返回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' headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36" } #设置一个请求头来突破反爬 all_sizes = [] #用一个空列表all_sizes来准备装尺寸数据 """获得商品id""" for i in range(1,51): #依次生成1-50来进行网址拼接 #拼接网址 url = "https://list.jd.com/list.html?cat=1315,1345,1364&ev=exbrand_90320&page=" + str(i) + "&sort=sort_rank_asc&trans=1&JL=6_0_0#J_main" res = requests.get(url,headers=headers).text #用requests的get函数来获取信息,用headers=headers来进行伪装.text转换为文本信息 res_xpath = etree.HTML(res) #转换为xpath类型 sp_ids = res_xpath.xpath('//*[@id="plist"]/ul/li/div/@data-sku') #用xpath提取商品的id time.sleep(5) #设置5秒延时 for sp_id in sp_ids: #依次从sp_ids中提取sp_id来拼接 """获得评论size""" for i in range(1,51): #依次生成1-50来拼接评论网址 url = "https://club.jd.com/comment/productPageComments.action?callback=fetchJSON_comment98&productId="+ str(sp_id) + "&score=0&sortType=5&page=" + str(i) + "&pageSize=10&isShadowSku=0&rid=0&fold=1" res = requests.get(url,headers=headers).text #用requests的get函数来获取信息,用headers=headers来进行伪装.text转换为文本信息 sizes = re.findall('"productSize":"(.*?)"',res) #用正则表达式获得size信息 print(sizes) #打印一下尺寸信息 for size in sizes: #依次循环sizes中的信息 all_sizes.append(size) #将信息添加到all_sizes中 time.sleep(5) #设置5秒延时 """进行尺码转换""" abcds = [] #用一个空列表abcds准备装尺寸数据 for size in all_sizes: #依次循环all_sizes中的信息 size = cczh(size) #用函数cczh来讲size的尺寸进行转换 abcds.append(size) #转换后的数据添加到abcds列表中 print(abcds) print(len(abcds)) #查看尺寸总数量 """进行尺寸统计""" tjs = set(abcds) #用列表abcds创建一个无序不重复元素集tjs,也就是删除重复元素,仅保留【A/B/C/D/E】等 for tj in tjs: #依次从tjs中提取数据 count = 0 #定义一个变量count=0进行计数 for abcd in abcds: #从abcds列表中依次提取数据 if tj == abcd: #如果abcd==tj则: count += 1 #count = count + 1 数量增加1 print(tj, ": ", count) #打印显示各个罩杯的数量
数据出来了!
631550
E : 3190
A : 144810
None : 1590
B : 331060
C : 132000
D : 18900
从京东数据来看,B的销量遥遥领先!A和C相差不大!E数量相对较小!至于F/G/H……的数量就更少了!