爬虫——有关抖音商品数据的爬取(蝉妈妈数据平台)

这篇具有很好参考价值的文章主要介绍了爬虫——有关抖音商品数据的爬取(蝉妈妈数据平台)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

抖音带货的兴起,让抖音电商一跃成为与淘宝电商、京东电商等电商平台共同争夺电商市场的存在,与淘宝电商、京东电商等电商平台相比,抖音电商拥有独特的优势,抖音以短视频的形式能够带来巨大的流量和热度,抖音以此为基础带来全新的带货方式——短视频带货,除此之外,抖音因其高流量高热度的基础,使得开展直播带货的途径顺其自然了许多。在此背景之下,抖音电商的商品销售数据的获取和总结分析归纳对于抖音电商调整当前销售结构和形式以及对未来的规划有着重大意义。
除此之外,也给一些想要简单爬取一些抖音商品销售数据的同学们一个便捷易懂的方法。

目标

由于通过抖音页面对商品销售数据进行爬取过于繁琐,工作量大,因此决定通过对蝉妈妈数据平台(拥有抖音商品销售数据的各大榜单)进行抖音商品销售数据的获取,又因想要通过蝉妈妈数据平台直接进行数据的获取所需要的成本和花销太大,因此决定通过以爬虫的形式对蝉妈妈数据平台的各大抖音商品销售数据榜单进行数据爬取,由新人注册蝉妈妈数据平台都会获得免费的会员时间,但免费的会员只能够查看数据,并不能对数据的直接导出,因此可以通过免费的会员使用爬虫对各大榜单数据进行爬取。
打开蝉妈妈数据平台以后,选择一个销售榜单,本文以直播带货的榜单为例,后续的网页下载、数据解析、数据存储和数据预处理都以直播带货榜单开展,其他榜单的相关处理与直播带货榜单相差不大,所以就以直播带货榜单为例,爬取方法以selenium自动化库为主。

抖店 爬虫,爬虫,python,beautifulsoup,selenium,html

爬取过程

网页源代码查看及分析

抖店 爬虫,爬虫,python,beautifulsoup,selenium,html

查看网页源代码以后,简单知道每一条直播带货的数据都存储在<tr></tr>标签中,因此我们便可得知,只要抓取所有的<tr></tr>标签,再对所有的<tr></tr>标签进行处理,对每一个<tr></tr>标签里的数据进行分割读取(每一个<td></td>标签内含有的便是每一条直播带货数据:直播销量、直播销售额等),就能得到每一条直播带货数据。

抖店 爬虫,爬虫,python,beautifulsoup,selenium,html
上图可知一条直播销售具体数据存储在<tr></tr>标签中的每一个<td></td>标签中。
因此只要获取每个<tr></tr>标签,再从每个标签中逐一分析<td></td>所含具体商品销售数据,即可获得预计要得到的内容。

网页下载

由于为了应对反爬机制,本爬虫主要使用了selenium自动化模块,因此网页下载部分没有一个单独的模块用来进行网页下载,因此也就没有ip代理池、headers、cookies的设置,所有就只有一行代码进行网页的下载(selenium.webdriver中自带的网页下载方法)

html = driver.page_source

数据解析

根据上述的网页源代码分析,对每一个<td></td>标签进行解析,对要得到的每一个商品特征信息进行查看,对其html位置进行解析,便可得到以下代码。
数据解析单独建立一个模块。解析过程中使用bs解析器。

from bs4 import BeautifulSoup
from selenium import webdriver
class WatchingParser:
    def __init__(self):
        self.base_url = "https://www.chanmama.com/"
        self.driver = webdriver.Chrome()
    def get_data(self,html_content):
        print("开始解析数据")

        if html_content is None:
            return  None

        # 汇总当前页所有数据
        result_data = []
        soup = BeautifulSoup(html_content,'lxml')

        # 获取所有tr标签
        all_data = soup.find_all('tr')
        all_data = all_data[2:]
        i = 1
        # 分析每一个tr标签的数据
        try:
            while i < 51:
                data = all_data[i]
                # 获取直播名称
                name = data.find_all('a',class_='text-decoration-none c333 link-hover cursor-pointer')
                watch_name = name[0].text
                watch_name = watch_name.replace("\n", "")
                watch_name = watch_name.replace(" ", "")
                # print(watch_name)
                
                # 获取达人名称
                people_name = name[1].text
                people_name = people_name.replace("\n", "")
                people_name = people_name.replace(" ", "")
                # print(people_name)
                
                # 获取达人粉丝数
                fans_quantity = data.find('span',class_='c999').text
                fans_quantity = fans_quantity.replace("\n", "")
                fans_quantity = fans_quantity.replace(" ", "")
                # print(fans_quantity)
                
                # 获取开播时间
                watch_start = data.find('td',class_='fs14').text
                watch_start = watch_start.replace("\n", "")
                watch_start = watch_start.replace(" ", "")
                # print(watch_start)
                
                # 获取直播时长
                watch_all = data.find_all('div',class_='text-align-left pl15')
                watch_longth = watch_all[1].text
                watch_longth = watch_longth.replace("\n", "")
                watch_longth = watch_longth.replace(" ", "")
                # print(watch_longth)
                
                # 获取人气峰值
                peak = data.find('td',class_='text-align-right').text
                peak = peak.replace("\n", "")
                peak = peak.replace(" ", "")
                # print(peak)
                
                # 获取观看人次
                watching_people = data.find('td',class_='divider text-align-right').text
                watching_people = watching_people.replace("\n", "")
                watching_people = watching_people.replace(" ", "")
                # print(watching_people)
                
                commodity = data.find_all('div',class_='text-align-right pr20')
                
                # 获取商品数
                commodity_quantity = commodity[0].text
                commodity_quantity = commodity_quantity.replace("\n", "")
                commodity_quantity = commodity_quantity.replace(" ", "")
                # print(commodity_quantity)
                
                # 获取销售额
                sale_money = commodity[1].text
                sale_money = sale_money.replace("\n", "")
                sale_money = sale_money.replace(" ", "")
                # print(sale_money)
                
                # 获取销售量
                sale_quantity = commodity[2].text
                sale_quantity = sale_quantity.replace("\n", "")
                sale_quantity = sale_quantity.replace(" ", "")
                # print(sale_quantity)
                
                item = {
                    'wacth_name' : watch_name,
                    'people_name' : people_name,
                    'fans_quantity' : fans_quantity,
                    'watch_start' : watch_start,
                    'watch_longth' : watch_longth,
                    'peak' : peak,
                    'wacthing_people' : watching_people,
                    'commodity_quantity' : commodity_quantity,
                    'sale_money' : sale_money,
                    'sale_quantity' : sale_quantity
                }
                # print(item)
                result_data.append(item)
                i = i + 1
                # print(i)
        except Exception as e:
            print(e)
        return result_data

数据存储

数据存储部分也单独建立一个模块。

import csv
import pymongo

class DataStorage:
    def __init__(self):
        self.alldata=[]

    def store_data(self, data):
        if data is None:
            return
        self.alldata.append(data)
    def watching_output_file(self,filename):
        print("开始将数据写入文件")
        file = open(filename, 'w', newline='', encoding='utf-8-sig')
        csv_writer = csv.writer(file, dialect='excel')
        #由于数据存储的是二维数组([{,},{},{},{}] 形式的,因此需要先读取一个{},再对里面的信息进行键值对分离
        for data in self.alldata:
            print(data)
            for note in data:
                print(note)
                cols = note.items()
                row = []
                for key, value in cols:
                    row.append(value)
                csv_writer.writerow(row)
        file.close()        

主程序

主程序运行,将数据解析和数据存储模块导入。

import time
from WatchingParser import *
from DataStorage import *
from selenium import webdriver

# 达人直播带货榜单数据获取

class WacthingMain:
    def __init__(self):
        self.parser = WatchingParser()
        self.datastorage = DataStorage()

    def set_limit(self, limit):
        self.urlmanager.set_limit(limit)

    def crawl(self, root_url, filename):
        driver = webdriver.Chrome(executable_path="D:\\Spider\\tiktok\\chromedriver\\chromedriver.exe")

        # 模拟登录,访问直播带货页面
        driver.get(root_url)
        time.sleep(7)

        # 进行账号的模拟登录
        driver.find_element_by_id('e2e-login-btn').click()
        time.sleep(3)
        driver.find_element_by_id('e2e-login-username').send_keys('17858855600')
        driver.find_element_by_id('e2e-login-password').send_keys('123456')
        driver.find_element_by_id('e2e-login-submit').click()
        time.sleep(5)
        # 进行30页的数据爬取
        i = 1
        while i < 21:
            print("进行第" + str(i) + "页数据抓取")
            try:
                time.sleep(7)
                html = driver.page_source
                # 对当前网页的html进行解析,获取当前商品信息,存入data
                data = self.parser.get_data(html)
                print(data)
                # 将data存入到datastorage的all_data属性中
                if data:
                    self.datastorage.store_data(data)
                print("成功抓取到第" + str(i) + "页数据")
            except Exception as e:
                print(e)
                print("第" + str(i) + "页抓取失败")
            #下一页点击     
            driver.find_element_by_xpath("/html/body/div[1]/div[1]/div[2]/div/div/div/div/div/div[2]/div[4]/div/button[2]/i").click()
            i = i + 1
        driver.quit()
        self.datastorage.watching_output_file(filename)

if __name__ == '__main__':
    root_url="https://www.chanmama.com/liveSearch?keyword=&search_type=0&follower_count=&gift_count=&volume=&is_take_product=0"
    spider_main = WacthingMain()
    spider_main.crawl(root_url,'D:\\Spider\\tiktok\\wacthing_data.csv')

数据预处理

对爬取到的数据进行一些简单的数据预处理,以下为爬取到的数据。
抖店 爬虫,爬虫,python,beautifulsoup,selenium,html
使用excel中的分列功能,对其进行以,为分隔符进行分割,并且使用删除重复值,得到以下的数据表。
抖店 爬虫,爬虫,python,beautifulsoup,selenium,html
由于粉丝数等具有w字单位的,会对后续的分析有影响,所有统一将w替换成000,将其变成数值类型,方便后续的分析。
由于销售量和销售额是一个区间,再根据其是一个固定的划分区间,具有一个递增的规律,因此对每个区间进行等级赋值,得到销售量等级数据列,方便后续的分析。得到以下的数据表。
抖店 爬虫,爬虫,python,beautifulsoup,selenium,html

总结和不足

总体代码运用了selenium自动化模块,能够有效地应对平台的反爬机制,从而有效地获取到网页的数据,但又由于使用的是selenium自动化模块,所以总体的代码运行效率不是很高,耗时长。
整个数据预处理总体上使用了excel的功能,虽有效地解决了要解决的问题,但有些处理过程并不简单有效率,预处理只做了剔除重复值,删除空白字段,和对销售区间进行等级映射赋值,还有其他的预处理过程并未进行,使得数据格式或有效程度未达到最大。文章来源地址https://www.toymoban.com/news/detail-712751.html

到了这里,关于爬虫——有关抖音商品数据的爬取(蝉妈妈数据平台)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python爬虫】基于selenium库爬取京东商品数据——以“七夕”为例

    小白学爬虫,费了一番功夫终于成功了哈哈!本文将结合本人踩雷经历,分享给各位学友~ 用写入方式打开名为data的csv文件,并确定将要提取的五项数据。 上面第一行代码值得一提,driver =  webdriver.Edge()括号内为Edge浏览器驱动程序地址,需要在Edge浏览器设置中查找Edge浏览器

    2024年02月06日
    浏览(16)
  • 开源的可视化爬虫易采集EasySpider:如何无代码可视化的爬取需要登录才能爬的网站

    一个可视化爬虫软件,可以使用图形化界面,无代码可视化的设计和执行爬虫任务。只需要在网页上选择自己想要爬的内容并根据提示框操作即可完成爬虫设计和执行。同时软件还可以单独以命令行的方式进行执行,从而可以很方便的嵌入到其他系统中。 EasySpider 是一种无代

    2024年02月15日
    浏览(16)
  • 【python爬虫】闲鱼爬虫,可以爬取商品

    目录 前言 一、介绍 二、爬虫流程 1. 确定并构造URL 2. 发送网络请求 3. 解析HTML并提取数据 4. 保存数据 三、使用代理IP 四、完整代码 五、总结 前言 闲鱼是一个很受欢迎的二手交易平台,但是由于没有开放API,我们需要使用爬虫来获取数据。本文将介绍如何使用Python爬

    2024年02月08日
    浏览(14)
  • 爬虫——python爬取京东商品用户评价

    以小米手环7为例,分别爬取小米手环7用户评价中的好评、中评、差评 使用工具:PyCharm Community 需要python库:requests 安装方法:File--Settings--Project --Python Interpreter 代码如下: 好评: 中评: 差评: 其中重要参数来源: 打开开发者工具,快捷键F12键,或鼠标右键--检查--网络

    2024年02月11日
    浏览(12)
  • Python如何运用爬虫爬取京东商品评论

    打开京东商品网址(添加链接描述) 查看商品评价 。我们点击评论翻页,发现网址未发生变化,说明该网页是动态网页。 我们在 浏览器右键点击“检查” ,,随后 点击“Network” ,刷新一下,在搜索框中 输入”评论“ ,最终找到 网址(url) 。我们点击Preview,发现了我们需要

    2024年02月07日
    浏览(21)
  • 爬虫之牛刀小试(十):爬取某宝手机商品的销量,价格和店铺

    首先淘宝需要登录,这一点如果用selenium如何解决,只能手动登录?如果不用selenium,用cookies登录也可。但是验证码又是一个问题,现在的验证码五花八门,难以处理。 我们回到正题,假设你已经登录上淘宝了,接着我们需要找到输入框和搜索按钮,输入“手机”,点击搜索

    2024年04月10日
    浏览(17)
  • 基于Selenium技术方案的爬取界面内容实践

    WebDriver提供了处理多个窗口的能力,这是通过使用“WebDriver.switchTo.window()”方法来切换到已知名称的窗口来实现的。如果名称未知,您可以使用“WebDriver.getWindowHandles()”获取已知窗口列表。您可以将句柄传递给switchTo.window()。 获取当前窗口句柄 driver.current_window_handle 返回的所

    2024年02月11日
    浏览(14)
  • 淘宝商品数据爬取商品信息采集数据分析API接口

         数据采集是数据可视化分析的第一步,也是最基础的一步,数据采集的数量和质量越高,后面分析的准确的也就越高,我们来看一下淘宝网的数据该如何爬取。 点此获取淘宝API测试key密钥 淘宝网站是一个动态加载的网站,我们之前可以采用解析接口或者用Selenium自动化

    2024年03月11日
    浏览(26)
  • Python爬取电商数据:商品采集接口 商品详情数据API 商品主图接口

    学习 Python 自动化的一个好办法就是构建一个价格追踪器。由于这项任务生成的脚本可以立即投入使用,所以对于初学者来说尤为方便。本文将向大家介绍如何用 Python 采集器建立一个可立即实现电商价格监控的可扩展价格追踪器。 价格监控的好处多多。对于您个人来说,通

    2023年04月24日
    浏览(20)
  • 利用scrapy框架对etherscan.io中给定Block范围内的交易信息的爬取

    一、 背景介绍 Etherscan 是 2015 年推出的一个以太坊区块探索和分析的分布式智能合同平台, 由于区块链中的交易信息等数据都是公开透明的 , 而 Etherscan 作为探索以太坊的窗口, 用户可以使用其查看自己的交易详情以及以太坊中的任何信息。 我们都有过这样的经历, 打开 taoba

    2024年02月12日
    浏览(10)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包