DrissionPage自动化爬取某音评论区
本帖最后由 苏紫方璇 于 2024-7-22 20:49 编辑DrissionPage是一个非常有实力的python自动化库,利用DrissionPage完成对某音评论区的爬取
略有bug,大佬们可以借鉴使用{:1_936:}{:1_936:}
主要是利用DrissionPage的接口监听功能去完成,不涉及二级评论。
略有不足,请大佬指正
from DrissionPage import WebPage, ChromiumOptions
from DataRecorder import Recorder
import datetime
import re
# 初始化浏览器信息
# path = ''
# co = ChromiumOptions().set_browser_path(path).save()
page = WebPage('d')
# 获取抖音界面
page.get('https://www.douyin.com/')
# 登录
input('登录后回车:')
# 开启监听
page.listen.start('https://www.douyin.com/aweme/v1/web/comment/list/?')
# 设置保存路径
recorder = Recorder('抖音评论.xlsx', cache_size=100)
# 设置编码格式
recorder.set.encoding('utf8')
# 设置保存表头
recorder.set.head(('作者', 'uid', 'ip属地', '内容', '时间'))
# 移动焦点到视频中
page.wait(1)
# 点击屏幕暂停或播放,移动鼠标焦点
page.actions.move_to('css=.xg-video-container video').click()
# 模拟按下H键,尝试移动焦点
page.actions.key_down('H')
# 等待加载定位评论按钮
page.wait.eles_loaded('css=.kT7icnwc div svg')
page.ele('css=.kT7icnwc div svg', timeout=3).click()
# 获取评论区数据信息
text = page.ele('css=div div .qx5s_hbj').text
re_text = int(re.findall(r'全部评论\((.*?)\)', text))
print(f'评论数量:{re_text}')
batal = re_text / 20
# 计算余数
remad = re_text % 20
batal = int(batal if remad == 0 else batal + 1)
print(f'预计执行次数:{batal}次')
for i in range(1, batal + 1):
# 获取评论监听接口信息
try:
res = page.listen.wait(timeout=8)
videes = res.response.body['comments']
# 数据清洗
for video in videes:
ip = video['ip_label']
text = video['text']
name = video['user']['nickname']
uid = video['user']['uid']
time = datetime.datetime.fromtimestamp(video["create_time"])
# 写入数据
recorder.add_data((name, uid, ip, text, time))
recorder.record()
# 设置数据滚动和结束逻辑
page.wait(0.5)
page.actions.move_to('css=.comment-mainContent').scroll(5000, 0)
print(f'------->第{i}次执行完成<-------------')
except:
print(f'------->第{i}次请求监听超时,自动退出<----------')
print(f'------->实际获取{i - 1}组数据<----------')
break
youleming 发表于 2024-7-22 18:44
这是拿来干什么呀
某音评论区采集 p1nk 发表于 2024-7-24 19:28
学习到了,但是使用的时候还是遇到了些问题。比如第一次使用后第二次再运行可能会报错,打开抖音后出现的也 ...
我也遇到这个问题,我当时怀疑是鼠标在网页的焦点导致定位出问题,所以我增加了全屏快捷键h和点击视频中心来调整焦点,可能还需要修改。
想要提取自己需要的视频可以修改page.get()的url参数来直接获取视频,我测试时大部分视频都可以用这个定位,有个别需要重新定位,通用性是有的{:1_893:}
如果有好的解决方法也可以告诉我学习一下{:1_893:} 这个确实比selenium好用 感谢分析很有用 参考参考 有成品吗 厉害大佬 这是拿来干什么呀 谢谢,拿走了 lv3389 发表于 2024-7-22 17:49
有成品吗
有的,我第一次发,不知道咋发成品