博客 / 詳情

返回

【技術分享】爬抖音博主軟件v1.5,一鍵批量採集對標主頁作品

本軟件工具僅限於學術交流使用,嚴格遵循相關法律法規,符合平台內容合法合規性,禁止用於任何商業用途!

一、背景分析

1.1 開發背景與功能介紹

和很多同學聊過,他們希望有一個小工具,把指定博主(對標賬號)的主頁已發佈作品的數據及視頻全部採集下來,然後做數據分析使用。為了滿足這類需求,我特意用python開發了這款工具:douyin_user_post

主要技術棧:

tkinter:GUI軟件界面
requests:爬蟲請求
json:解析響應數據
time:間隔等待,防止反爬
csv:保存csv結果
logging:日誌記錄

軟件運行界面:image

自動導出的作品csv文件:(包含17個字段: 頁碼,作者暱稱,uid,sec_uid,作者鏈接,作者粉絲數,視頻標題,視頻標籤,視頻鏈接,發佈時間,視頻時長,是否置頂,點贊數,評論數,收藏數,推薦數,轉發數)
image

自動存儲到文件夾裏的視頻文件:
image

視頻mp4文件的存儲規則:

  1. 以博主暱稱命名視頻文件夾
  2. 視頻文件夾裏存儲的視頻文件,以視頻id命名,比如:7585842009861279011.mp4
  3. 如果作品是圖文類,則不下載視頻

以上。

1.2 軟件説明

重要説明,請詳讀:

  1. Windows系統、Mac系統均可直接運行,無需配置python環境
  2. 軟件通過接口協議爬取,並非通過模擬瀏覽器等RPA類工具,穩定性較高!
  3. 軟件運行完成後,會在當前文件夾(即,軟件所在文件夾)生成csv結果文件
  4. 爬取過程中,每爬一條,存一次csv。並非爬完最後一次性保存!防止因異常中斷導致丟失前面的數據(每條請求間隔2s,可自由配置)
  5. 爬取過程中,有log文件詳細記錄運行過程,方便回溯

二、主要技術

2.1 模塊介紹

軟件全部模塊採用python語言開發,主要分工如下:

tkinter:GUI軟件界面
requests:爬蟲請求
json:解析響應數據
time:間隔等待,防止反爬
csv:保存csv結果
logging:日誌記錄

出於版權考慮,暫不公開完整源碼,僅向用户提供軟件使用權。

2.2 部分源碼

軟件界面:

# 創建主窗口
root = tk.Tk()
root.title('爬抖音博主軟件v1.5 | 馬哥python説')
# 設置窗口大小
root.minsize(width=850, height=660)

爬蟲請求:

# 發送請求
r = requests.get(url, headers=h2, params=params)
# 接收響應數據
json_data = r.json()

保存數據:

# 保存到csv文件
with open(self.result_file, 'a+', encoding='utf_8_sig', newline='') as f:
    writer = csv.writer(f)
    writer.writerow(data_row)
self.tk_show('csv已保存:' + self.result_file)

日誌記錄:

def get_logger(self):
    self.logger = logging.getLogger(__name__)
    # 日誌格式
    formatter = '[%(asctime)s-%(filename)s][%(funcName)s-%(lineno)d]--%(message)s'
    # 日誌級別
    self.logger.setLevel(logging.DEBUG)
    # 控制枱日誌
    sh = logging.StreamHandler()
    log_formatter = logging.Formatter(formatter, datefmt='%Y-%m-%d %H:%M:%S')
    # info日誌文件名
    info_file_name = time.strftime("%Y-%m-%d") + '.log'
    # 將其保存到特定目錄
    case_dir = r'./logs/'
    info_handler = TimedRotatingFileHandler(filename=case_dir + info_file_name,
                                            when='MIDNIGHT',
                                            interval=1,
                                            backupCount=7,
                                            encoding='utf-8')
    self.logger.addHandler(sh)
    sh.setFormatter(log_formatter)
    self.logger.addHandler(info_handler)
    info_handler.setFormatter(log_formatter)
    return self.logger

日誌文件截圖:
log文件

以上。

END、原創聲明

本工具為作者原創開發,僅限於學術交流使用,嚴格遵循相關法律法規,符合平台內容合法合規性,禁止用於任何商業用途。

本軟件工具僅限於學術交流使用,嚴格遵循相關法律法規,符合平台內容合法合規性,禁止用於任何商業用途!

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.