双十一京东内衣销售暴露了妹子们的真实Size!zt

查看虎扑今日新帖
最新回复:2019年11月24日 22点52分 PT
共 (313) 楼
x
x0079
楼主 (虎扑)
通过爬虫去爬取京东的用户评价,通过分析爬取的数据能得到很多结果,比如,哪一种颜色的胸罩最受女性欢迎,以及中国女性的平均size(仅供参考哦~)
打开开发者工具-network,在用户评价页面我们发现浏览器有这样一个请求 通过分析我们发现主要用的参数有三个productId,page,pageSize。后两个为分页参数,productId是每个商品的id,通过这个id去获取商品的评价记录,所以我们只需要知道每个商品的productId就轻而易举的获取评价了。再来分析搜索页面的网页源代码 通过分析我们发现每个商品都在li标签中,而li标签又有一个data-pid属性,这个对应的值就是商品的productId了。 大概了解了整个流程,就可以开始我们的爬虫工作了。 首先我们需要在搜索页面获取商品的id,为下面爬取用户评价提供productId。key_word为搜索的关键字,这里就是【胸罩】 import requests import re """ 查询商品id """ def find_product_id(key_word):    jd_url = 'https://search.jd.com/Search'    product_ids = []    # 爬前3页的商品    for i in range(1,4):        param = {'keyword': key_word, 'enc': 'utf-8', 'page': i}        response = requests.get(jd_url, params=param)        # 商品id        ids = re.findall('data-pid="(.*?)"', response.text, re.S)        product_ids += ids    return product_ids 将前三页的商品id放入列表中,接下来我们就可以爬取评价了 我们通过分析preview发现获取用户评价这个请求响应的格式是一个字符串后面拼接了一个json(如下图),所以我们只要将无用的字符删除掉,就可以获取到我们想要的json对象了。 而在json对象中的comments的内容就是我们最终想要的评价记录 """ 获取评论内容 """ def get_comment_message(product_id):    urls = ['https://sclub.jd.com/comment/productPageComments.action?'            'callback=fetchJSON_comment98vv53282&'            'productId={}'            '&score=0&sortType=5&'            'page={}'            '&pageSize=10&isShadowSku=0&rid=0&fold=1'.format(product_id, page) for page in range(1, 11)]    for url in urls:        response = requests.get(url)        html = response.text        # 删除无用字符        html = html.replace('fetchJSON_comment98vv53282(', '').replace(');', '')        data = json.loads(html)        comments = data['comments']        t = threading.Thread(target=save_mongo, args=(comments,))        t.start() 在这个方法中只获取了前10页的评价的url,放到urls这个列表中。通过循环获取不同页面的评价记录,这时启动了一个线程用来将留言数据存到到MongoDB中。 我们继续分析评价记录这个接口发现我们想要的两条数据 productColor:产品颜色 productSize:产品尺寸


# mongo服务 client = pymongo.MongoClient('mongodb://127.0.0.1:27017/') # jd数据库 db = client.jd # product表,没有自动创建 product_db = db.product #  保存mongo def save_mongo(comments):    for comment in comments:        product_data = {}        # 颜色        # flush_data清洗数据的方法        product_data['product_color'] = flush_data(comment['productColor'])        # size        product_data['product_size'] = flush_data(comment['productSize'])        # 评论内容        product_data['comment_content'] = comment['content']        # create_time        product_data['create_time'] = comment['creationTime']        # 插入mongo        product_db.insert(product_data) 因为每种商品的颜色、尺寸描述上有差异,为了方面统计,我们进行了简单的数据清洗。这段代码非常的不Pythonic。不过只是一个小demo,大家无视即可。 def flush_data(data):    if '肤' in data:        return '肤色'    if '黑' in data:        return '黑色'    if '紫' in data:        return '紫色'    if '粉' in data:        return '粉色'    if '蓝' in data:        return '蓝色'    if '白' in data:        return '白色'    if '灰' in data:        return '灰色'    if '槟' in data:        return '香槟色'    if '琥' in data:        return '琥珀色'    if '红' in data:        return '红色'    if '紫' in data:        return '紫色'    if 'A' in data:        return 'A'    if 'B' in data:        return 'B'    if 'C' in data:        return 'C'    if 'D' in data:        return 'D' 这几个模块的功能编写完毕,下面只需要将他们联系起来 # 创建一个线程锁 lock = threading.Lock() # 获取评论线程 def spider_jd(ids):    while ids:        # 加锁        lock.acquire()        # 取出第一个元素        id = ids[0]        # 将取出的元素从列表中删除,避免重复加载        del ids[0]        # 释放锁        lock.release()        # 获取评论内容        get_comment_message(id) product_ids = find_product_id('胸罩') for i in (1, 5):    # 增加一个获取评论的线程    t = threading.Thread(target=spider_jd, args=(product_ids,))    # 启动线程    t.start() 上面代码加锁的原因是为了防止重复消费共享变量 运行之后的查看MongoDB:
得到结果之后,为了能更直观的表现数据,我们可以用matplotlib库进行图表化展示 import pymongo from pylab import * client = pymongo.MongoClient('mongodb://127.0.0.1:27017/') # jd数据库 db = client.jd # product表,没有自动创建 product_db = db.product # 统计以下几个颜色 color_arr = ['肤色', '黑色', '紫色', '粉色', '蓝色', '白色', '灰色', '香槟色', '红色'] color_num_arr = [] for i in color_arr:    num = product_db.count({'product_color': i})    color_num_arr.append(num) # 显示的颜色 color_arr = ['bisque', 'black', 'purple', 'pink', 'blue', 'white', 'gray', 'peru', 'red'] #labeldistance,文本的位置离远点有多远,1.1指1.1倍半径的位置 #autopct,圆里面的文本格式,%3.1f%%表示小数有三位,整数有一位的浮点数 #shadow,饼是否有阴影 #startangle,起始角度,0,表示从0开始逆时针转,为第一块。一般选择从90度开始比较好看 #pctdistance,百分比的text离圆心的距离 #patches, l_texts, p_texts,为了得到饼图的返回值,p_texts饼图内部文本的,l_texts饼图外label的文本 patches,l_text,p_text = plt.pie(sizes, labels=labels, colors=colors,                                labeldistance=1.1, autopct='%3.1f%%', shadow=False,                                startangle=90, pctdistance=0.6) #改变文本的大小 #方法是把每一个text遍历。调用set_size方法设置它的属性 for t in l_text:    t.set_size=(30) for t in p_text:    t.set_size=(20) # 设置x,y轴刻度一致,这样饼图才能是圆的 plt.axis('equal') plt.title("内衣颜色比例图", fontproperties="SimHei") # plt.legend() plt.show() 运行代码,我们发现肤色的最受欢迎 其次是黑色 (钢铁直男表示不知道是不是真的…)
接下来我们再来统计一下size 的分布图,这里用柱状图进行显示 index=["A","B","C","D"] client = pymongo.MongoClient('mongodb://127.0.0.1:27017/') db = client.jd product_db = db.product value = [] for i in index:    num = product_db.count({'product_size': i})    value.append(num) plt.bar(left=index, height=value, color="green", width=0.5) plt.show() 运行后我们发现 B size的女性更多一些

小伙伴们你们猜对了吗?嘿嘿~ 链接

 

🔥 最新回帖

球球她爸
313 楼
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

会说话你就出本书吧老铁🐶

丫本
312 楼
引用 @rajahn 发表的:
班长补充:买b的很多是a,真b能穿c,买cd的还有相当部分是胖子坦克大妈属性

抛掉坦克和大妈,太真实了

东莞成就淡水
311 楼
引用 @别摸了哥哥 发表的:
啰嗦这么多,直接放最后一张图不好嘛。

我直接拉到最下面

李达康爸爸
310 楼
我前女友F

乓乒兵丘
309 楼
死变态

 

🛋️ 沙发板凳

铁岭安东尼7
课代表总结:B多。

D
DanielBear
牛批。。之前也有JR爬过,数据差不多
别摸了哥哥
啰嗦这么多,直接放最后一张图不好嘛。

窝大人
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

肤色🏼和黑色最多。

虎扑用户786516
支持技术贴

克里斯炮指导
引用 @别摸了哥哥 发表的:
啰嗦这么多,直接放最后一张图不好嘛。

教学嘛

植物大战讲师
requests不会被反爬吗

虎扑用户438468
文科生佩服

H
HolaRafael
a和b占了60了快

K
KEIGOCOOL
所以我說
大部分女JR都在裝B
應該沒問題吧!!

微风清吹
总结: 肤色,B

詹姆斯老老迷弟
B最多,a多于c,d的忽略不计

K
Karlbully
引用 @HolaRafael 发表的:
a和b占了60了快

超80%了…

无聊SAMA君
就怕变态有文化
西
西北海王
谁能告诉我哪个颜色的最多

霍勒迪仔公仔
。。。。月入100k都亏待你了。。。

拉货
看到最后一张图终于看懂了

早睡早起多喝热水
牛逼

x
x0079
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

我的重点是,还是有真D的,都是宝啊

F
Frank_wy
引用 @霍勒迪仔公仔 发表的:
。。。。月入100k都亏待你了。。。

不是很难的东西😄

i
i独孤求败
这才是把知识做到了活学活用啊,是后生们学习的榜样👍🏼👍🏿

用户0620788336
人种基因作基础,营养结构,形体锻炼,作息时间,心机,等多重元素构建的结果。
不过各位海绵宝宝们基本上是穿上是个E,不穿是个B。

T
TOM小哥
引用 @我特严肃KOP 发表的:
支持技术贴

这种造福社会的技术值得推广。

一夜八八次郎
所以有什么意义呢?是穿给你看还是给你抓🐶

詹姆斯独秀
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

我觉得我女盆友b就够了,不敢太奢望!主要是我没女盆友。。。

K
Kevin3492
引用 @窝大人 发表的:
肤色🏼和黑色最多。

感觉淡蓝色应该挺多,没想到那么少

托尼·帕克
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

买B cup的,大都其实没B

Z
Z张若水
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

开车???

于淡泊中
引用 @西北海王 发表的:
谁能告诉我哪个颜色的最多

肤色第一,黑色第二
A,B占了总数的60-70%

3
375016740
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

总结的不够好,漏了一个重点: B多,且A+B占了整体的85%。 C+D仅为15%。
总结完,心一酸。 可怜的中国男人,妹子就这水平还要这要那各种不满足。 心累

可能有人要说我直男,但这就是我总结完内心的第一想法😓😓

N
NGIML
请问爬虫怎么学呀

登登登登大大
浙江应该A多

贵族JR
python爬虫教程:从入门到监狱
文斯卡待
引用 @x0079 发表的:
我的重点是,还是有真D的,都是宝啊

C最耐看,当然d也很好。

天天天下
引用 @x0079 发表的:
我的重点是,还是有真D的,都是宝啊

不好看

虎扑用户757949
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

这也不能代表真实size,因为很多A的会买大一号…

r
rajahn
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

班长补充:买b的很多是a,真b能穿c,买cd的还有相当部分是胖子坦克大妈属性

大爱满人间荣耀救苍生
为啥淘宝天天首页给我推荐内衣?

窝大人
引用 @Kevin3492 发表的:
感觉淡蓝色应该挺多,没想到那么少

那是你个人的爱好吧😂

虎扑用户767759
如果大作业是这样的题目就好了,肯定有动力写

K
Kevin3492
引用 @窝大人 发表的:
那是你个人的爱好吧😂

怎么可能有人根据我的爱好穿,就是脱了看到的,蓝色真的很多,黑色的只在大街上看到过

拉谁说话
不是 你没事爬这个干嘛。。。。
福大欧文
引用 @KEIGOCOOL 发表的:
所以我說
大部分女JR都在裝B
應該沒問題吧!!

@灰灰姑凉

老王来也
引用 @x0079 发表的:
我的重点是,还是有真D的,都是宝啊

买红色D的宝中之宝

虎扑用户224630
总结,一般都会买大一号的穿

您还说
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

这个销量不配着垫子的销量根本提现不了实际情况

D
DwyaneJames36
毕竟condom基本不分尺码……🐶

俗世鄙人
引用 @DanielBear 发表的:
牛批。。之前也有JR爬过,数据差不多

这个

杨升庵
引用 @大爱满人间荣耀救苍生 发表的:
为啥淘宝天天首页给我推荐内衣?

说明你曾经搜索过,还不止一次

天可怜见的
引用 @Kevin3492 发表的:
感觉淡蓝色应该挺多,没想到那么少

淡蓝色不实用啊,买这些贴身衣物,要考虑到外罩颜色太浅/太薄/淋湿水等等情况,所以朴素的颜色比较实用。

瓦灰色
引用 @x0079 发表的:
我的重点是,还是有真D的,都是宝啊

也许是很胖

不见复关
引用 @x0079 发表的:
我的重点是,还是有真D的,都是宝啊

肥婆一大把d,f都有

用戶壹零貳肆
引用 @x0079 发表的:
我的重点是,还是有真D的,都是宝啊

你得看是多少D 給你一個90D你絕對沒興趣

老Fe扎Zn
引用 @别摸了哥哥 发表的:
啰嗦这么多,直接放最后一张图不好嘛。

总要列点数据来来佐证嘛,:不然没有说服力啊

欧美亚非拉
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

买B的多,不代表真B多。很多A妹子,也喜欢戴B充数。

小考验
引用 @托尼·帕克 发表的:
买B cup的,大都其实没B

嘿嘿

虎扑用户318207


沧海遗猪
引用 @托尼·帕克 发表的:
买B cup的,大都其实没B

空杯

点不开按耐不住
今年的本命年妹子比较少啊

发烂渣
一堆废话

养若为曦
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

紫色醉骚

M
Manu_Duke
我记得去年好像也有这么个帖子

同济低等数学
总结:牛逼,可以

双狙摩天轮
如果符合大街上看到的女生情况

宇宙神牛
引用 @托尼·帕克 发表的:
买B cup的,大都其实没B

里面要塞东西,或者那种特别厚的。

西
西尔维斯特涛
我能说我去年看过这个吗?

一个聪明人
引用 @别摸了哥哥 发表的:
啰嗦这么多,直接放最后一张图不好嘛。

给你一张图,你信吗?

K
Ken686
引用 @托尼·帕克 发表的:
买B cup的,大都其实没B

哈哈哈哈真实

c
columbo8
以前马云就说了,淘宝的数据显示浙江的女的胸部最小。

用户0373021364
引用 @375016740 发表的:
总结的不够好,漏了一个重点: B多,且A+B占了整体的85%。 C+D仅为15%。
总结完,心一酸。 可怜的中国男人,妹子就这水平还要这要那各种不满足。 心累

可能有人要说我直男,但这就是我总结完内心的第一想法😓😓

啥时候统计一下bq长度,女性估计也心酸

葛瑞
引用 @x0079 发表的:
我的重点是,还是有真D的,都是宝啊

D的也还好,有个前女友就是D的

在下李生兮
引用 @詹姆斯独秀 发表的:
我觉得我女盆友b就够了,不敢太奢望!主要是我没女盆友。。。

哈哈哈哈哈哈哈那你说个鸡儿,看的我也一把辛酸泪

0
0恋之风景0
引用 @不见复关 发表的:
肥婆一大把d,f都有

楼主要的就是这种🐶
0
090dd
引用 @rajahn 发表的:
班长补充:买b的很多是a,真b能穿c,买cd的还有相当部分是胖子坦克大妈属性

我宣布班长升级为大队长!

虎扑麦
引用 @大爱满人间荣耀救苍生 发表的:
为啥淘宝天天首页给我推荐内衣?

大数据 🐶

省港澳第一德莱文
引用 @托尼·帕克 发表的:
买B cup的,大都其实没B

盲僧,你发现了华点

用户0804303991
我这文化水平只看得懂图
自动忽略文字
微雨人先绣
我猜你其实为了拔买家秀图片

A
AirForce爷
引用 @托尼·帕克 发表的:
买B cup的,大都其实没B

女装大佬???

虎扑用户548202
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

还有很多aa的可以买,但没有必要

口院贤
知识就是力量!

菲徳尔卡斯特罗
引用 @托尼·帕克 发表的:
买B cup的,大都其实没B

那买a的岂不是比我还小

你转身向北侧脸还是很美
引用 @用户0373021364 发表的:
啥时候统计一下bq长度,女性估计也心酸

我bq能有14cm🐶

穆沐果
引用 @铁岭安东尼7 发表的:
课代表总结:B多。

我怎么感觉身边大部分人都是A偶尔几个B都觉得稀有了。。。

很女子很弓虽大
引用 @375016740 发表的:
总结的不够好,漏了一个重点: B多,且A+B占了整体的85%。 C+D仅为15%。
总结完,心一酸。 可怜的中国男人,妹子就这水平还要这要那各种不满足。 心累

可能有人要说我直男,但这就是我总结完内心的第一想法😓😓

所以郎朗的择偶标准很容易理解了吧

狗头

詹天佑为自己
引用 @用户0373021364 发表的:
啥时候统计一下bq长度,女性估计也心酸

10厘米路过

白百何我顶你
引用 @不见复关 发表的:
肥婆一大把d,f都有

第一任女友是F,穿衣服看着胖,骨架大,肉并不多。
后来交往过一任E的炮/友,个高,偏瘦,胸大的不协调,据她说是一次流产后没保养好,暴瘦下来。皮肤很松弛,胸也下垂的厉害。

西
西北海王
引用 @于淡泊中 发表的:
肤色第一,黑色第二
A,B占了总数的60-70%

晓得了

紫色齿轮
引用 @375016740 发表的:
总结的不够好,漏了一个重点: B多,且A+B占了整体的85%。 C+D仅为15%。
总结完,心一酸。 可怜的中国男人,妹子就这水平还要这要那各种不满足。 心累

可能有人要说我直男,但这就是我总结完内心的第一想法😓😓

而且会有小胸买大罩,不会有大胸买小罩

虎扑用户710725
引用 @rajahn 发表的:
班长补充:买b的很多是a,真b能穿c,买cd的还有相当部分是胖子坦克大妈属性

看到坦克我笑了,尼玛这是王者荣耀哈哈哈哈哈哈哈哈哈哈哈哈哈哈

海龙卷风
其中有很多实际是A的,而CD的有很多是大胖子
用户0373021364
引用内容由于违规已被删除

一般化吧。。。

断崖上的俗人
引用 @菲徳尔卡斯特罗 发表的:
那买a的岂不是比我还小

真特么小的跟豆粒一样,一点点起伏都没有!绝对不如我个大老爷们胸大,这样的也得戴啊🤣我都怀疑奶孩子的时候,是偷偷揣了瓶牛奶🐮

卡牌与风
引用 @无聊SAMA君 发表的:
就怕变态有文化

不怕流氓有文化🐶

虎扑用户911352
别忘了五环外的北京。。。老哥什么时候测评一下pdd的数据,单纯学术范畴那种

黄美英1019
引用 @托尼·帕克 发表的:
买B cup的,大都其实没B

要不怎么有自信?

用户0373021364
引用 @詹天佑为自己 发表的:
10厘米路过

心疼你。。