接下来我们尝试用 Python 抓取天猫内衣销售数据,并分析得到中国女性普遍的罩杯数据、最受欢迎的内衣颜色是什么、评论的关键字。希望看完之后你能替你女朋友买上一件心怡的内衣。我们先看看分析得到的成果是怎样的?(讲的很详细,推荐跟着敲一遍)
(买个内衣这么开心)
图片看不清楚的话,可以把图片单独拉到另一个窗口。 这里是分析了一万条数据得出的结论,可能会有误差,但是还是希望单身的你们能找到 0.06% 那一批妹纸。下面我会详细介绍怎么抓取天猫内衣销售数据,存储、分析、展示。
- 研究天猫网站
- 抓取天猫评论数据
- 存储、分析数据
- 可视化
我们随意进入一个商品的购买界面(能看到评论的那个界面),F12 开发者模式 – Network 栏 – 刷新下界面 – 在如图的位置搜索 list_ 会看到一个 list_detail_rate.htm?itemId= ….
如下图:【单击】这个url 能看到返回的是一个 Json 数据 ,检查一下你会发现这串 Json 就是商品的评论数据 [‘rateDetail’][‘rateList’]
【双击】这个url 你会得到一个新界面,如图
看一下这个信息
这里的路径 就是获取评论数据的 url了。这个 URL 有很多参数你可以分析一下每个值都是干嘛的。
itemId 对应的是商品id, sellerId 对应的是店铺id,currentPage 是当前页。这里 sellerId 可以填任意值,不影响数据的获取。
抓取天猫评论数据写一个抓取天猫评论数据的方法。getCommentDetail
# 获取商品评论数据
def getCommentDetail(itemId,currentPage):
url = 'https://rate.tmall.com/list_detail_rate.htm?itemId=' + str(
itemId) + '&sellerId=2451699564ℴ=3¤tPage=' + str(currentPage) + '&append=0callback=jsonp336'
# itemId 产品id ;sellerId 店铺id 字段必须有值,但随意值就行
html = common.getUrlContent(url) # 获取网页信息
# 删掉返回的多余信息
html = html.replace('jsonp128(','') #需要确定是不是 jsonp128
html = html.replace(')','')
html = html.replace('false','"false"')
html = html.replace('true','"true"')
# 将string 转换为字典对象
tmalljson = json.loads(html)
return tmalljson
这里需要注意的是 jsonp128 这个值需要你自己看一下,你那边跟我这个应该是不同的。
在上面的方法里有两个变量,itemId 和 currentPage 这两个值我们动态来控制,所以我们需要获得 一批 商品id号 和 评论的最大页数 用来遍历。
写个获取商品评论最大页数的方法 getLastPage
# 获取商品评论最大页数
def getLastPage(itemId):
tmalljson = getCommentDetail(itemId,1)
return tmalljson['rateDetail']['paginator']['lastPage'] #最大页数
那现在怎么获取 产品的id 列表呢?我们可以在天猫中搜索商品关键字 用开发者模式观察
这里观察一下这个页面的元素分布,很容易就发现了 商品的id 信息,当然你可以想办法确认一下。
现在就写个 获取商品id 的方法 getProductIdList
# 获取商品id
def getProductIdList():
url = 'https://list.tmall.com/search_product.htm?q=内衣' # q参数 是查询的关键字
html = common.getUrlContent(url) # 获取网页信息
soup = BeautifulSoup(html,'html.parser')
idList = []
# 用Beautiful Soup提取商品页面中所有的商品ID
productList = soup.find_all('div', {'class': 'product'})
for product in productList:
idList.append(product['data-id'])
return idList
现在所有的基本要求都有了,是时候把他们组合起来。
在 main 方法中写剩下的组装部分
if __name__ == '__main__':
productIdList = getProductIdList() #获取商品id
initial = 0
while initial < len(productIdList) - 30: # 总共有60个商品,我只取了前30个
try:
itemId = productIdList[initial]
print('----------', itemId, '------------')
maxPage = getLastPage(itemId) #获取商品评论最大页数
num = 1
while num
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?