这篇博客介绍了如何使用 Selenium 自动化浏览器操作,从抖音网页中提取评论数据,并将其保存到一个文本文件中。通过配置无头浏览器、访问指定网页、获取特定元素、处理和过滤数据,最终将结果保存到文件中。这种方法可以用于自动化测试、数据抓取和数据分析等领域,展示了 Selenium 在网页自动化和数据抓取方面的强大功能。
对数据进行 分析与处理可以参考使用 SnowNLP 对抖音评论进行情感分析与倾向评分-优快云博客https://blog.youkuaiyun.com/m0_74972192/article/details/140899608?spm=1001.2014.3001.5501
代码解析
-
导入库:
from selenium import webdriver from selenium.webdriver.chrome.options import Options from selenium.webdriver.common.by import By import time
selenium
:用于自动化浏览器操作。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')
- 创建
Options
对象并添加一些参数:--headless
:无头模式,不显示浏览器界面。--disable-gpu
:禁用 GPU 加速。--no-sandbox
:禁用沙盒模式。--disable-dev-shm-usage
:禁用/dev/shm
共享内存。
- 创建
-
启动浏览器:
driver = webdriver.Chrome(options=chrome_options) driver.get('https://www.douyin.com/?recommend=1') time.sleep(10)
- 使用配置好的选项启动 Chrome 浏览器。
- 打开指定的 URL(抖音)。
-
暂停程序:
time.sleep(10)
- 使用
time.sleep(10)
暂停程序 10 秒,等待页面加载完成。
- 使用
-
获取特定属性的 div 元素:
elements = driver.find_elements(By.CSS_SELECTOR, 'div[data-e2e="comment-item"]')
- 使用
find_elements
方法获取所有包含data-e2e="comment-item"
属性的div
元素。
- 使用
-
with open('output.txt', 'w', encoding='utf-8') as file:
打开文件以写入:
- 打开一个名为
output.txt
的文件,以写入模式和 UTF-8 编码。
- 打开一个名为
-
遍历每个 div 元素:
for element in elements: spans = element.find_elements(By.TAG_NAME, 'span') user = '' comment = '' time = ''
- 获取每个
div
元素中的所有span
元素。 - 初始化变量
user
、comment
和time
。
- 获取每个
-
遍历每个 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
元素的文本内容并进行处理:- 过滤掉包含“展开”和“回复”的文本。
- 过滤掉纯数字内容。
- 分类并存储用户、评论和时间信息。
- 检查
-
写入分类后的数据到文件:
if user and comment: file.write(user + '\n') file.write(comment + '\n') if time: file.write(time + '\n')
- 如果
user
和comment
都存在,则写入文件。 - 如果
time
存在,则写入文件。
- 如果
-
关闭浏览器:
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
的文件,包含从抖音网页提取的用户、评论和时间信息。
用户: ^乐天派^
评论: 六神合体都出来了
时间: 2周前·辽宁
用户: 卖女孩的小火柴
评论: 螃蟹是赛博坦来的
时间: 1天前·浙江
用户: pico(腐化)
评论: 这玩具的官方什么时候出这三
时间: 1周前·湖南
用户: LBZ
评论: 好熟悉,我回忆起来了
时间: 1周前·湖北
用户: LEOZ
评论: 怎么一股果宝特攻的味道
时间: 2周前·广东
扩展
-
无头浏览器的应用:
- 自动化测试:无头浏览器常用于自动化测试,特别是在持续集成和持续部署(CI/CD)环境中,可以在没有图形界面的服务器上运行测试。
- 数据抓取:无头浏览器可以用于数据抓取,从网页中提取数据而不需要显示浏览器界面,节省资源。
-
数据处理和过滤:
- 正则表达式:可以使用正则表达式来更精确地过滤和提取数据。例如,可以用正则表达式匹配特定格式的文本内容。
- 自然语言处理(NLP):可以使用 NLP 技术对提取的数据进行进一步处理和分析,例如情感分析、关键词提取等。
相关类型扩展
-
Web Scraping 工具:
- BeautifulSoup:一个用于解析 HTML 和 XML 文档的 Python 库,常用于数据抓取。
- Scrapy:一个用于爬取网站并提取结构化数据的 Python 框架,适用于大规模数据抓取。
-
浏览器自动化工具:
- Puppeteer:一个用于控制 Chrome 或 Chromium 浏览器的 Node.js 库,支持无头模式。
- Playwright:一个用于自动化浏览器的 Node.js 库,支持多种浏览器(如 Chromium、Firefox 和 WebKit)。
-
数据存储:
- 数据库:可以将抓取的数据存储到数据库中,如 MySQL、PostgreSQL 或 MongoDB,以便于后续查询和分析。
- 云存储:可以将数据存储到云存储服务中,如 AWS S3、Google Cloud Storage,以便于共享和备份。
爬虫项目推荐
- 使用 Python 指定内容 爬取百度引擎搜索结果-优快云博客
- 使用Python和Selenium爬取QQ新闻热榜-优快云博客
- 使用Selenium 和 Python 抓取快手网页大量评论-优快云博客
- 使用 Python 和 Selenium 爬取快手视频 附源码-优快云博客
- 如何使用Python、Selenium 爬取酷狗音乐网站的歌曲信息-优快云博客
- 使用Python 和 Selenium 抓取 酷狗 音乐专辑 附源码-优快云博客
其他项目推荐
- 使用 TensorFlow 和 CIFAR-10 数据集进行图像分类-优快云博客
- 在 Python 中编写一个简单的文件搜索工具-优快云博客
- 使用Python从.exe文件中提取图标_提取文件图标-优快云博客
- Python 文件搜索程序详解与实现-优快云博客
- 使用Python 进行文本情感分析-优快云博客
- 使用 Python和PyQt5 打造 你的专属文件查询工具! 附源码-优快云博客
- 用Python和PyQt5打造你的专属音乐播放器!轻松创建带封面的音乐列表-优快云博客
说明
这段代码的主要目的是使用 Selenium 自动化浏览器操作,从抖音网页中提取评论数据,并将这些数据分类写入到一个文本文件中。代码通过配置无头浏览器、访问指定网页、获取特定元素、处理和过滤数据,最终将结果保存到文件中。
总结
- 配置无头浏览器:通过设置 Chrome 选项,使浏览器在后台运行,不显示图形界面。
- 访问网页:使用 Selenium 打开抖音网页,并等待页面加载完成。
- 提取数据:获取包含特定属性的
div
元素,并遍历其中的span
元素,提取用户、评论和时间信息。 - 数据处理:过滤掉不需要的内容,并将分类后的数据写入到文本文件中。
- 关闭浏览器:完成数据提取后,关闭浏览器。
结论
通过这段代码,我们可以实现自动化的数据抓取,从抖音网页中提取评论信息,并将其保存到文件中。这展示了 Selenium 在网页自动化和数据抓取方面的强大功能。希望这些解析对你有帮助!
欢迎在评论区留言。继续探索和学习,祝你在深度学习的旅程中取得更多的成果!🚀
希望这个博客对你有所帮助!如果你有任何问题需要进一步的指导,请随时提问。继续加油! 🚀