手把手帶你從零基礎抓取A站短視頻,並且制作從動態壁紙,這些小姐姐我全都要!


大家好,我是辣條。

我知道大家都是沖着學技術來的,肯定不是為了那些好看的小姐姐進來的,所以直接進入主題吧。

在這里插入圖片描述

采集數據目標

網址:A站
在這里插入圖片描述

效果展示

在這里插入圖片描述

工具使用

開發環境:win10、python3.7
開發工具:pycharm、Chrome
工具包:requests、docx,lxml

重點學習內容

  1. lxml的使用
  2. m3u8文件處理
  3. ts文件合成MP4

項目思路解析

通過xpath方式提取分類之后的首頁數據
獲取到每個視頻的vacid
拼接進入詳情頁面的url地址
在這里插入圖片描述

https://www.acfun.cn/{}

請求詳情頁面
獲取網頁源代碼的backupUrl的對應的值
請求對應的m3u8的文件地址

https://tx-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/b6f3561527ea7674-4c05d717a155db2cd75c5e3455bcc285-hls_4k_h264_1.m3u8?pkey=ABCVjggV-526Eqfc2aQQzGQs8FaP_JPEFMV8eoqWKXmTZNXICw3L3XRSv0vwV-O7fLtKIhIyZzMNqkxhT_7BJ8X0gLmIuej3RM1T37Wg7iIGLBDUcMNB27vJ8DIX0F2_QAyLKZ7DGb4h7C_7MvCIy1arBJWk0OVyDm5Gvn7iS1clxQbLPd9N1J-yRHeuoMAQ-bF-cQca4Dpi0jz2XSyxAqvj1U-kNkybrP2xBwTxT1gG5CRLcOu0uBvjVryvdLm_bwQ&safety_id=AAKL9ykXaHfy4Hgj44E9P_hc\%22],\%22codecs\%22:\%22avc1.640033,mp4a.40.2\%22,\%22hidden\%22:false,\%22disableAdaptive\%22:false,\%22comment\%22:\%22b6f3561527ea7674/HLS_4K_H264_1\%22,\%22id\%22:1,\%22url\%22:\%22https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/b6f3561527ea7674-4c05d717a155db2cd75c5e3455bcc285-hls_4k_h264_1.m3u8?pkey=ABCVjggV-526Eqfc2aQQzGQs8FaP_JPEFMV8eoqWKXmTZAnICSBGjLT_PyFsslJJXiOP2eQEO--qVGdx3RAVv2u-HzgG2V3aGkpXflsVIfuLURk-uyEAGOvuDvQoIX64vgGt9w5oTxJ1X_6LoiSXl2Z-7Kb5ytDpExAACRaRMSOqDcxaB-Q9niMjCa9yuAs40UKwxyIzZdmKyRjL2GRFwBqH0CjM9ZKxkjmQ7nuTn4bfnFyWP2LIrkeW6RDFLuG1mgc&safety_id=AAKL9ykXaHfy4Hgj44E9P_hc

在這里插入圖片描述
請求m3u8的文件地址
解析對應的m3u8文件
在這里插入圖片描述
視頻數據是ts視頻拼接起來的
取出m3u8文件里面的每個ts的下載地址
拼接成新的視頻下載地址

https://ali-safety-video.acfun.cn/mediacloud/acfun/acfun_video/hls/b6f3561527ea7674-723550b3c6b1ff9a4b05be736acd7098-hls_720p_2.00000.ts?pkey=ABClqkBWwxUgoTqPKsnjoZ5X2vsyNNN9F0mDGRhhZMiyRUZkfurznShxCBqmWZWTtj2M2zCGcFwL-F30xT89BkrNoA4QT7yBQ9q4sjyRJpmBrVqcd2vQHWZhjTzkUsPY2hQuWtSoYHBrWJbqTgNbWVF-k0vjXxbDsN311gKd358IpcQnTvboQDX1wOKspWfm_OHyXMkPJqdCulUQ6wVBA6i5kE9RGNnVVgyFKxbRzPiKzyKfCnzYo6x723CCbbRNnBM&safety_id=AAKL9ykXaHfy4Hgj44E9P_hc

下載對應的ts視頻數據
將每個ts數據以追加的形式寫入到MP4的文件里

簡易源碼分析

import requests import re from tqdm import tqdm from lxml import etree import os def request_data(url): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.72 Safari/537.36 Edg/90.0.818.42' } response = requests.get(url, headers=headers) return response def save(name, video): # path = f'{name}\\' if not os.path.exists("視頻"): os.makedirs("視頻") with open("視頻/" + name + '.mp4', mode='ab') as f: f.write(video) start_url = "https://www.acfun.cn/v/list218/index.htm" res = request_data(start_url) html_data = etree.HTML(res.text) acid_list = html_data.xpath('//div[@class="list-content-item"]/a[1]/@href') # ac = input('輸入acid:') for ac in acid_list: url = 'https://www.acfun.com{}'.format(ac) print(url) # 請求頁面地址 獲取到 m3u8地址 data = request_data(url).text m3u8_url = re.findall('backupUrl(.*?)\"]', data)[0].replace('"', '').split('\\')[-2] title = re.findall('"title":"(.*?)"', data)[0] # 請求m3u8地址 m3u8_data = request_data(m3u8_url).text # 數據替換 m3u8_data = re.sub(r'#EXTM3U', "", m3u8_data) m3u8_data = re.sub(r'#EXT-X-VERSION:\d', "", m3u8_data) m3u8_data = re.sub(r'#EXT-X-TARGETDURATION:\d', "", m3u8_data) m3u8_data = re.sub(r'#EXT-X-MEDIA-SEQUENCE:\d', "", m3u8_data) m3u8_data = re.sub(r'#EXTINF:\d.\d,', "", m3u8_data) m3u8_data = re.sub(r'#EXT-X-ENDLIST', "", m3u8_data) m3u8 = m3u8_data.split() for i in tqdm(m3u8): ts_url = 'https://tx-safe-video.acfun.cn/mediacloud/acfun/acfun_video/hls/' + i video = request_data(ts_url).content save(title, video) 

對你有幫助的話,記得給辣條三連哦

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM