前言
身為一名程式員!對于動漫還是很喜歡的!尤其喜歡看各種動漫!是以今天送大家一波福利。把我經常看動漫的方式教給你們!希望你們能喜歡!其實主要是最近被室友安利熱血動漫番《終末的女武神》和《拳願阿修羅》,太上頭了周末休息熬夜看完了。不過資源不太好找,一怒爬取了資源,這下可以看個夠了。室友崇拜連連,想起了我的班花,快點開學啊,阿西吧...
效果展示
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIiZpdmL4MzMzEzMxMTM5ADOwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
爬取目标
工具使用
開發工具:pycharm
開發環境:python3.7, Windows10
使用工具包:requests,lxml, re,tqdm
重點學習内容
正則的使用 tqdm的使用 各種音頻資料的處理
項目思路解析
搜尋你需要的動漫資料,根據自己需要的視訊不同解析視訊的方法也是不一樣的(會挑選兩種視訊進行解析)
在目前頁面需要提取出對應的章節資訊,擷取到章節資訊的a标簽的跳轉内容,提取出每個章節的名字,提取章節的方法我使用的xpath的方法(各位大佬可自行嘗試其他的方法)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
'Referer': 'http://www.imomoe.la/search.asp'
}
url = 'http://www.imomoe.la/view/8024.html'
response = requests.get(url, headers=headers)
# print(response.content.decode('gbk'))
html_data = etree.HTML(response.content.decode('gbk'))
chapter_list = html_data.xpath('//div[@class="movurl"]/ul/li/a/text()')
chapter_url_list = html_data.xpath('//div[@class="movurl"]/ul/li/a/@href')[0]
url的資料需要自行拼接,根據新的url擷取詳情頁面的資料
按照正常思路首先應該檢視播放位址是否為靜态資料
明顯看出資料并不是靜态資料,在區分是否為動态資料,通過抓包工具進行擷取。
也并不是動态資料,媒體資料也不知道怎麼形成的。
從頭在來從前端頁面在進行解析,找視訊頁面的事件。
并沒有發現有效資料,但是在iframe下面的Script标簽有js跳轉位址 ,解析的資料網址和視訊的播放位址是一樣的域名, 點選檢視, 這不是就是我們找的視訊播放位址嘛 ,終于找到了,開始實作 在目前頁面通過xpath方式提取出script裡的js跳轉位址, 拼接出新的視訊連結播放位址,發送請求,通過正規表達式提取出所有MP4播放位址。
new_url = 'http://www.imomoe.la' + chapter_url_list
response = requests.get(new_url, headers=headers)
html = etree.HTML(response.content.decode('gbk'))
data_url = 'http://www.imomoe.la' + html.xpath('//div[@class="player"]/script[1]/@src')[0]
res = requests.get(data_url, headers=headers).text
# print(res)
play_url_list = re.findall('\$(.*?)\$flv', res)
print(play_url_list)
儲存對視訊資料發送請求,儲存資料到mp4 ,通過tqdm工具能檢視對應下載下傳的速度以及下載下傳的進度
for chapter, play_url in tqdm(zip(chapter_list, play_url_list)):
result = requests.get(play_url, headers=headers).content
f = open('終末的女武神/' + chapter + '.mp4', "wb")
f.write(result)
到這大功告成 但是當我把網址修改成鬥破蒼穹這個動漫時,卻傳回的資料為空
這個視訊的加載資料的規則是不一樣的加載的資料為m3u8的格式, 其他的音頻的資料加載可能也不一樣, 處理m3u8的資料稍稍的有丢丢複雜,它的m3u8的檔案内部有嵌套了m3u8連結位址, 需要轉換對應的資料接口,進行連結位址拼接, 取出ts檔案進行下載下傳,拼接成視訊。
m3u8_url_list = re.findall('\$(.*?)\$bdhd', res)
for m3u8_url, chapter in zip(m3u8_url_list, chapter_list):
data = requests.get(m3u8_url, headers=headers)
# print(data.text)
new_m3u8_url = 'https://cdn.605-zy.com/' + re.findall('/(.*?m3u8)', data.text)[0]
# print(new_m3u8_url)
ts_data = requests.get(new_m3u8_url, headers=headers)
ts_url_list = re.findall('/(.*?ts)', ts_data.text)
print("正在下載下傳:", chapter)
for ts_url in tqdm(ts_url_list):
result = requests.get('https://cdn.605-zy.com/' + ts_url).content
f = open('鬥破蒼穹/' + chapter + '.mp4', "ab")
f.write(result)
項目思路總結
- 擷取到想要動漫的位址
- 提取詳情頁面的名字已經跳轉位址
- 擷取頁面的靜态js檔案
- 解析視訊播放位址或者m3u8檔案
- 儲存對應資料
簡易源碼分享
import requests
from lxml import etree
import re
from tqdm import tqdm
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
'Referer': 'http://www.imomoe.la/search.asp'
}
url = 'http://www.imomoe.la/view/8024.html'
response = requests.get(url, headers=headers)
# print(response.content.decode('gbk'))
html_data = etree.HTML(response.content.decode('gbk'))
chapter_list = html_data.xpath('//div[@class="movurl"]/ul/li/a/text()')
chapter_url_list = html_data.xpath('//div[@class="movurl"]/ul/li/a/@href')[0]
# print(chapter_list)
# print(chapter_url_list)
new_url = 'http://www.imomoe.la' + chapter_url_list
response = requests.get(new_url, headers=headers)
html = etree.HTML(response.content.decode('gbk'))
data_url = 'http://www.imomoe.la' + html.xpath('//div[@class="player"]/script[1]/@src')[0]
res = requests.get(data_url, headers=headers).text
# print(res)
play_url_list = re.findall('\$(.*?)\$flv', res)
print(play_url_list)
for chapter, play_url in tqdm(zip(chapter_list, play_url_list)):
result = requests.get(play_url, headers=headers).content
f = open('終末的女武神/' + chapter + '.mp4', "wb")
f.write(result)
那麼今天的分享就到這裡了,記得給我三連哈!
⑥項目源碼案例分享有
如果你用得到的話可以直接拿走,在我的QQ技術交流群裡群号:948351247(純技術交流和資源共享,廣告勿入)以自助拿走
點選這裡 領取