天天看點

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!

前言

身為一名程式員!對于動漫還是很喜歡的!尤其喜歡看各種動漫!是以今天送大家一波福利。把我經常看動漫的方式教給你們!希望你們能喜歡!其實主要是最近被室友安利熱血動漫番《終末的女武神》和《拳願阿修羅》,太上頭了周末休息熬夜看完了。不過資源不太好找,一怒爬取了資源,這下可以看個夠了。室友崇拜連連,想起了我的班花,快點開學啊,阿西吧...

效果展示

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!

爬取目标

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!

工具使用

開發工具:pycharm

開發環境:python3.7, Windows10

使用工具包:requests,lxml, re,tqdm

重點學習内容

正則的使用 tqdm的使用 各種音頻資料的處理

項目思路解析

搜尋你需要的動漫資料,根據自己需要的視訊不同解析視訊的方法也是不一樣的(會挑選兩種視訊進行解析)

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!

在目前頁面需要提取出對應的章節資訊,擷取到章節資訊的a标簽的跳轉内容,提取出每個章節的名字,提取章節的方法我使用的xpath的方法(各位大佬可自行嘗試其他的方法)

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!
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擷取詳情頁面的資料

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!

按照正常思路首先應該檢視播放位址是否為靜态資料

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!

明顯看出資料并不是靜态資料,在區分是否為動态資料,通過抓包工具進行擷取。

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!

也并不是動态資料,媒體資料也不知道怎麼形成的。

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!

從頭在來從前端頁面在進行解析,找視訊頁面的事件。

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!

并沒有發現有效資料,但是在iframe下面的Script标簽有js跳轉位址 ,解析的資料網址和視訊的播放位址是一樣的域名, 點選檢視, 這不是就是我們找的視訊播放位址嘛 ,終于找到了,開始實作 在目前頁面通過xpath方式提取出script裡的js跳轉位址, 拼接出新的視訊連結播放位址,發送請求,通過正規表達式提取出所有MP4播放位址。 

二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!
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)
           
​到這大功告成 但是當我把網址修改成鬥破蒼穹這個動漫時,卻傳回的資料為空 
           
二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!
二次元,動漫你喜歡嗎?用Python爬取了1T的動漫送給你!臨時加2T記憶體條!

這個視訊的加載資料的規則是不一樣的加載的資料為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(純技術交流和資源共享,廣告勿入)以自助拿走

點選這裡 領取