buluo533 发表于 2024-7-22 15:47

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




buluo533 发表于 2024-7-22 20:30

youleming 发表于 2024-7-22 18:44
这是拿来干什么呀

某音评论区采集

buluo533 发表于 2024-7-24 20:15

p1nk 发表于 2024-7-24 19:28
学习到了,但是使用的时候还是遇到了些问题。比如第一次使用后第二次再运行可能会报错,打开抖音后出现的也 ...

我也遇到这个问题,我当时怀疑是鼠标在网页的焦点导致定位出问题,所以我增加了全屏快捷键h和点击视频中心来调整焦点,可能还需要修改。
想要提取自己需要的视频可以修改page.get()的url参数来直接获取视频,我测试时大部分视频都可以用这个定位,有个别需要重新定位,通用性是有的{:1_893:}
如果有好的解决方法也可以告诉我学习一下{:1_893:}

liuhaigang12 发表于 2024-7-22 16:14

这个确实比selenium好用

不忘形影 发表于 2024-7-22 17:16

感谢分析很有用

panghu9670 发表于 2024-7-22 17:31

参考参考

lv3389 发表于 2024-7-22 17:49

有成品吗

nowns 发表于 2024-7-22 18:13

厉害大佬

youleming 发表于 2024-7-22 18:44

这是拿来干什么呀

gmdxga 发表于 2024-7-22 19:12

谢谢,拿走了

buluo533 发表于 2024-7-22 20:29

lv3389 发表于 2024-7-22 17:49
有成品吗

有的,我第一次发,不知道咋发成品
页: [1] 2 3 4 5 6
查看完整版本: DrissionPage自动化爬取某音评论区