您当前的位置: 首页 >  Python

嗨学编程

暂无认证

  • 0浏览

    0关注

    1405博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

为了给女友挑合适的内衣,我用 Python 爬了天猫内衣店的数据

嗨学编程 发布时间:2019-07-24 14:24:56 ,浏览量:0

接下来我们尝试用 Python 抓取天猫内衣销售数据,并分析得到中国女性普遍的罩杯数据、最受欢迎的内衣颜色是什么、评论的关键字。希望看完之后你能替你女朋友买上一件心怡的内衣。我们先看看分析得到的成果是怎样的?(讲的很详细,推荐跟着敲一遍) image

当然在学习Python的道路上肯定会困难,没有好的学习资料,怎么去学习呢? 学习Python中有不明白推荐加入交流群号:790921645 群里有志同道合的小伙伴,互帮互助, 群里有不错的视频学习教程和PDF!

img

img

img

(买个内衣这么开心)

图片看不清楚的话,可以把图片单独拉到另一个窗口。 这里是分析了一万条数据得出的结论,可能会有误差,但是还是希望单身的你们能找到 0.06% 那一批妹纸。下面我会详细介绍怎么抓取天猫内衣销售数据,存储、分析、展示。

  • 研究天猫网站
  • 抓取天猫评论数据
  • 存储、分析数据
  • 可视化
研究天猫网站

我们随意进入一个商品的购买界面(能看到评论的那个界面),F12 开发者模式 – Network 栏 – 刷新下界面 – 在如图的位置搜索 list_ 会看到一个 list_detail_rate.htm?itemId= ….

如下图:【单击】这个url 能看到返回的是一个 Json 数据 ,检查一下你会发现这串 Json 就是商品的评论数据 [‘rateDetail’][‘rateList’]

img

【双击】这个url 你会得到一个新界面,如图

img

看一下这个信息

img

这里的路径 就是获取评论数据的 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 列表呢?我们可以在天猫中搜索商品关键字 用开发者模式观察

img

这里观察一下这个页面的元素分布,很容易就发现了 商品的id 信息,当然你可以想办法确认一下。

img

现在就写个 获取商品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             
关注
打赏
1663681728
查看更多评论
0.2059s