Python Selenium实现抖音评论数据的 自动化采集 附源码

 这篇博客介绍了如何使用 Selenium 自动化浏览器操作,从抖音网页中提取评论数据,并将其保存到一个文本文件中。通过配置无头浏览器、访问指定网页、获取特定元素、处理和过滤数据,最终将结果保存到文件中。这种方法可以用于自动化测试、数据抓取和数据分析等领域,展示了 Selenium 在网页自动化和数据抓取方面的强大功能。

对数据进行 分析与处理可以参考使用 SnowNLP 对抖音评论进行情感分析与倾向评分-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_74972192/article/details/140899608?spm=1001.2014.3001.5501

代码解析

  1. 导入库

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    from selenium.webdriver.common.by import By
    import time
    
    • selenium:用于自动化浏览器操作。
    • time:用于暂停程序执行。
  2. 配置 Chrome 选项

    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    chrome_options.add_argument('--no-sandbox')
    chrome_options.add_argument('--disable-dev-shm-usage')
    
    • 创建 Options 对象并添加一些参数:
      • --headless:无头模式,不显示浏览器界面。
      • --disable-gpu:禁用 GPU 加速。
      • --no-sandbox:禁用沙盒模式。
      • --disable-dev-shm-usage:禁用 /dev/shm 共享内存。
  3. 启动浏览器

    driver = webdriver.Chrome(options=chrome_options)
    driver.get('https://www.douyin.com/?recommend=1')
    time.sleep(10)
    
    • 使用配置好的选项启动 Chrome 浏览器。
    • 打开指定的 URL(抖音)。
  4. 暂停程序

    time.sleep(10)
    
    • 使用 time.sleep(10) 暂停程序 10 秒,等待页面加载完成。
  5. 获取特定属性的 div 元素

    elements = driver.find_elements(By.CSS_SELECTOR, 'div[data-e2e="comment-item"]')
    
    • 使用 find_elements 方法获取所有包含 data-e2e="comment-item" 属性的 div 元素。
  6. with open('output.txt', 'w', encoding='utf-8') as file:
    

    打开文件以写入

    • 打开一个名为 output.txt 的文件,以写入模式和 UTF-8 编码。
  7. 遍历每个 div 元素

    for element in elements:
        spans = element.find_elements(By.TAG_NAME, 'span')
        user = ''
        comment = ''
        time = ''
    
    • 获取每个 div 元素中的所有 span 元素。
    • 初始化变量 usercomment 和 time
  8. 遍历每个 span 元素的数据

    for span in spans:
        if not span.find_elements(By.TAG_NAME, 'img'):
            text_content = span.text.strip()
            if '展开' in text_content and '回复' in text_content:
                continue
            if text_content.isdigit():
                continue
            if '前·' in text_content:
                time = f'时间: {text_content}'
            elif not user and '回复' not in text_content:
                user = f'用户: {text_content}'
            elif '回复' not in text_content:
                comment = f'评论: {text_content}'
    
    • 检查 span 元素是否包含 img 元素。
    • 获取 span 元素的文本内容并进行处理:
      • 过滤掉包含“展开”和“回复”的文本。
      • 过滤掉纯数字内容。
      • 分类并存储用户、评论和时间信息。
  9. 写入分类后的数据到文件

    if user and comment:
        file.write(user + '\n')
        file.write(comment + '\n')
    if time:
        file.write(time + '\n')
    
    • 如果 user 和 comment 都存在,则写入文件。
    • 如果 time 存在,则写入文件。
  10. 关闭浏览器

    driver.quit()
    
    • 使用 driver.quit() 关闭浏览器。

完整代码

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
import time

# 配置 Chrome 选项
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')

# 启动浏览器
driver = webdriver.Chrome(options=chrome_options)
driver.get('https://www.douyin.com/?recommend=1')

time.sleep(10)

# 获取所有包含特定属性的 div 元素
elements = driver.find_elements(By.CSS_SELECTOR, 'div[data-e2e="comment-item"]')

# 打开文件以写入
with open('output.txt', 'w', encoding='utf-8') as file:
    # 遍历每个 div 元素
    for element in elements:
        # 获取 div 元素中的所有 span 元素
        spans = element.find_elements(By.TAG_NAME, 'span')

        # 存储用户和评论的变量
        user = ''
        comment = ''
        time = ''

        # 遍历每个 span 元素的数据
        for span in spans:
            # 检查 span 元素是否包含 img 元素
            if not span.find_elements(By.TAG_NAME, 'img'):
                # 获取 span 元素的文本内容
                text_content = span.text.strip()

                # 过滤掉“评论: 展开2条回复”格式的数据
                if '展开' in text_content and '回复' in text_content:
                    continue

                # 过滤掉纯数字内容
                if text_content.isdigit():
                    continue

                # 判断并分类打印用户和时间
                if '前·' in text_content:
                    time = f'时间: {text_content}'
                elif not user and '回复' not in text_content:
                    user = f'用户: {text_content}'
                elif '回复' not in text_content:
                    comment = f'评论: {text_content}'

        # 写入分类后的数据到文件
        if user and comment:
            file.write(user + '\n')
            file.write(comment + '\n')
        if time:
            file.write(time + '\n')

# 关闭浏览器
driver.quit()

运行结果

运行结果是一个名为 output.txt 的文件,包含从抖音网页提取的用户、评论和时间信息。

89d4d63de68f4635b8d82829cea42026.png

用户: ^乐天派^
评论: 六神合体都出来了
时间: 2周前·辽宁
用户: 卖女孩的小火柴
评论: 螃蟹是赛博坦来的
时间: 1天前·浙江
用户: pico(腐化)
评论: 这玩具的官方什么时候出这三
时间: 1周前·湖南
用户: LBZ
评论: 好熟悉,我回忆起来了
时间: 1周前·湖北
用户: LEOZ
评论: 怎么一股果宝特攻的味道
时间: 2周前·广东

90a0289fe761474b9e661451ac2c4f73.png

扩展

  1. 无头浏览器的应用

    • 自动化测试:无头浏览器常用于自动化测试,特别是在持续集成和持续部署(CI/CD)环境中,可以在没有图形界面的服务器上运行测试。
    • 数据抓取:无头浏览器可以用于数据抓取,从网页中提取数据而不需要显示浏览器界面,节省资源。
  2. 数据处理和过滤

    • 正则表达式:可以使用正则表达式来更精确地过滤和提取数据。例如,可以用正则表达式匹配特定格式的文本内容。
    • 自然语言处理(NLP):可以使用 NLP 技术对提取的数据进行进一步处理和分析,例如情感分析、关键词提取等。

相关类型扩展

  1. Web Scraping 工具

    • BeautifulSoup:一个用于解析 HTML 和 XML 文档的 Python 库,常用于数据抓取。
    • Scrapy:一个用于爬取网站并提取结构化数据的 Python 框架,适用于大规模数据抓取。
  2. 浏览器自动化工具

    • Puppeteer:一个用于控制 Chrome 或 Chromium 浏览器的 Node.js 库,支持无头模式。
    • Playwright:一个用于自动化浏览器的 Node.js 库,支持多种浏览器(如 Chromium、Firefox 和 WebKit)。
  3. 数据存储

    • 数据库:可以将抓取的数据存储到数据库中,如 MySQL、PostgreSQL 或 MongoDB,以便于后续查询和分析。
    • 云存储:可以将数据存储到云存储服务中,如 AWS S3、Google Cloud Storage,以便于共享和备份。

   爬虫项目推荐

    其他项目推荐

说明

这段代码的主要目的是使用 Selenium 自动化浏览器操作,从抖音网页中提取评论数据,并将这些数据分类写入到一个文本文件中。代码通过配置无头浏览器、访问指定网页、获取特定元素、处理和过滤数据,最终将结果保存到文件中。

总结

  1. 配置无头浏览器:通过设置 Chrome 选项,使浏览器在后台运行,不显示图形界面。
  2. 访问网页:使用 Selenium 打开抖音网页,并等待页面加载完成。
  3. 提取数据:获取包含特定属性的 div 元素,并遍历其中的 span 元素,提取用户、评论和时间信息。
  4. 数据处理:过滤掉不需要的内容,并将分类后的数据写入到文本文件中。
  5. 关闭浏览器:完成数据提取后,关闭浏览器。

结论

通过这段代码,我们可以实现自动化的数据抓取,从抖音网页中提取评论信息,并将其保存到文件中。这展示了 Selenium 在网页自动化和数据抓取方面的强大功能。希望这些解析对你有帮助!

欢迎在评论区留言。继续探索和学习,祝你在深度学习的旅程中取得更多的成果!🚀


希望这个博客对你有所帮助!如果你有任何问题需要进一步的指导,请随时提问。继续加油! 🚀

  • 10
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LIY若依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值