淘宝某商品数据分析

前言

先说好,这是一篇正能量的科普文章,还有我不是变态!!!🐶

先唠一唠

我相信不光是之前的我,正在看这篇文章的老绅士们对于文胸也只知道A,B,C吧,知识相当之贫乏(不过好像知道这些,在现实生活中也并没有什么卵用。。。)

但是!!!我今天还是要来给大家科普一下这方面的知识。🐶

第一步

第二步

第三步

科普部分就到这了。。。

 

什么???还想看???

 

没了!!!

 

正题:爬取淘宝数据

from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
import csv
import time
import re


def deal_data(str):
    res = re.sub(r'此用户没有填写评论!\n', "", str)
    res2 = re.sub(r'收货.*?追加:\n', "", res)
    res3 = re.sub(r'初次评价:\n', "", res2)
    res4 = re.sub(r'颜色分类:\d+', "", res3)
    res5 = re.sub(r'尺码:', "", res4)
    res6 = re.sub(r'解释:.*?\n', "", res5)
    list1 = res6.split("\n")
    if len(list1[2]) > 3:
        del list1[2]#删除初次评价
    del list1[-1]#删除顾客名字
    if len(list1) > 4:#判断该顾客是否是超级会员,是的话就删掉
        del list1[-1]
    try:#让评论在列表的第一项
        if isinstance(eval(list1[0]), float):
                list1[0], list1[1] = list1[1], list1[0]
    except:
        pass
    return list1


def deal_data_again(contents):
    for content in contents:
        content.append(content[-1][:2])
        content.append(content[-2][-1:])
    return contents


def save_to_csv(contents):
    with open('underwear_info.csv', 'w', newline='', encoding='utf_8_sig')as f:
        csv_writer = csv.writer(f)
        csv_writer.writerow(["评论", "日期", "颜色", "尺码", "下胸围", "罩杯"])
        csv_writer.writerows(contents)
    print("数据录入成功!!!")


if __name__ == '__main__':

    url = "https://detail.tmall.com/item.htm?id=17568465508&ali_refid=a3_430583_1006:1104111323:N:q0napovGLPrB8Dfa089ENfL6YEZwgUBp:2a574904899e290ad05c9915fb0465d6&ali_trackid=1_2a574904899e290ad05c9915fb0465d6&spm=a230r.1.14.3"
    url2 = "https://www.taobao.com/"
    driver = webdriver.Chrome()
    driver.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument", {
      "source": """
        Object.defineProperty(navigator, 'webdriver', {
          get: () => undefined
        })
      """
    })
    driver.get(url2)
    driver.find_element_by_css_selector("#q").send_keys("文胸")
    driver.find_element_by_css_selector("#J_TSearchForm > div.search-button > button").click()
    wait = WebDriverWait(driver, 20)
    # 设置判断条件:等待id='kw'的元素加载完成
    button = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, '#J_Itemlist_TLink_14298752380')))
    button.click()
    driver.switch_to.window(driver.window_handles[1])#切换标签页

    css_str = "#J_Reviews > div > div.rate-grid > table > tbody > tr:nth-child({0})"
    css_str2 = "#J_Reviews > div > div.rate-page > div > a:nth-child({0})"
    contents = []
    for i in range(20):#页数循环s
        if i > 0:
            for k in range(20, 50):#缓慢向下滚动页面
                driver.execute_script('window.scrollBy(0,{0})'.format(10 * k))
                time.sleep(0.5)
        else:
            for k in range(20, 200):#缓慢向下滚动页面
                driver.execute_script('window.scrollBy(0,{0})'.format(10 * k))
                time.sleep(0.5)

        for j in range(1, 21):#评论循环
            str = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, css_str.format(j)))).text
            content = deal_data(str)
            contents.append(content)
            print(content)

        if i <= 5:
            element1 = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, css_str2.format(i + 6))))
            driver.execute_script("arguments[0].click();", element1)
        else:
            element1 = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, css_str2.format(11))))
            driver.execute_script("arguments[0].click();", element1)
    contents = deal_data_again(contents)
    save_to_csv(contents)

将爬取数据可视化

写在最后

问答

Q : 为什么想要去做这么一个数据分析呢?

A : 是因为最近发现了一个名叫pyecharts的可视化库,我觉得它画图画的很好看,所以想学习一下。然后又在和鲸社区上看到了一篇,关于对淘宝文胸数据的可视化分析,我觉得很有趣,然后就想试一试。

Q : 为什么就爬了400条数据?

A : 有一个原因是,淘宝好像对我进行了浏览限制,翻页翻到一半的时候就不让我翻了,老是让我休息休息hhh

Q : 你这爬取数据的代码咋看起来这么拉垮?

A : 一是因为我好久没写python了。

     二是因为我也是个半吊子,没有正规标准的学这门语言,总之就是基础有点差哈哈哈哈,没记住过啥东西,一般想到啥写啥,不会写了或者有问题了一般都会上网解决。

     所以大家轻点喷,有啥建议我会虚心接受,谢谢谢谢!

参考链接

因为那些个可视化的代码基本上都是照搬过来的,就改了一些数据源,以及解决了一些跳出来的问题。因为一方面我刚刚开始看这个库,另一方面我觉得我写不出他那样的效果,而且我觉得他也做的蛮好看的然后就拿过来了hhhh

https://www.heywhale.com/mw/project/5ee5033271a691002d55267d

下面那个是关于pyecharts这个库的详细用法,以及一些例子

https://www.heywhale.com/mw/notebook/600c3b03e455800015b9a7e5

 

posted @ 2021-06-12 15:53  Violet_eg  阅读(104)  评论(0编辑  收藏  举报
Live2D