手把手教你使用Python網(wǎng)絡(luò)爬蟲獲取亞馬遜商品頁面的m3u8格式視頻
回復(fù)“書籍”即可獲贈(zèng)Python從入門到進(jìn)階共10本電子書
大家好,我是Python進(jìn)階者。
一、前言
前幾天在Python最強(qiáng)王者交流群有個(gè)叫【頑皮Dolly】的粉絲問了一個(gè)Python網(wǎng)絡(luò)爬蟲的問題,抓取亞馬遜商品視頻,這里拿出來給大家分享下,一起學(xué)習(xí)下。

二、解決過程
這里【皮皮】給出了解答,一起來看看吧。
使用瀏覽器抓包發(fā)現(xiàn),這個(gè)視頻是m3u8格式的。m3u8是蘋果公司推出的視頻播放標(biāo)準(zhǔn),是m3u的一種,只是編碼格式采用的是UTF-8。
找到Url,就可以處理了。
其實(shí)關(guān)于m3u8格式的視頻下載,網(wǎng)上已經(jīng)有很多教程了,也有人做出了小工具,可以直接拿過來用,也是非常卷了!這里使用【吳老板】寫的小教程來演示。

【吳老板】的小教程鏈接:https://github.com/PY-GZKY/python-automation-docs/blob/master/docs/%E7%88%AC%E8%99%AB/m3u8%E9%9F%B3%E8%A7%86%E9%A2%91%E6%8B%BC%E6%8E%A5.md

里邊的代碼可以直接拿過來用,核心代碼如下:
import?datetime
import?time
import?os
import?requests
#?m3u8是本地的文件路徑
def?get_ts_urls(m3u8_path):
????urls?=?[]
????with?open(m3u8_path,?"r")?as?file:
????????lines?=?file.readlines()
????????for?line?in?lines:
????????????if?line.endswith(".ts\n"):
????????????????print(line)
????????????????urls.append("https://m.media-amazon.com/images/S/vse-vms-transcoding-artifact-us-east-1-prod/084028a2-9a64-485f-a55b-676577059927/"+line.strip("\n"))
????return?urls
def?download(ts_urls,?download_path):
????for?i?in?range(len(ts_urls)):
????????ts_url?=?ts_urls[i]
????????file_name?=?ts_url.split("/")[-1]
????????print("開始下載?%s"?%?file_name)
????????try:
????????????response?=?requests.get(ts_url,?stream=True,?verify=False)
????????except?Exception?as?e:
????????????print("異常請求:%s"?%?e.args)
????????????return
????????ts_path?=?download_path?+?"/{0}.ts".format(i)
????????with?open(ts_path,?"wb+")?as?file:
????????????for?chunk?in?response.iter_content(chunk_size=1024):
????????????????if?chunk:
????????????????????file.write(chunk)
????????time.sleep(.56)
def?file_walker(path):
????file_list?=?os.listdir(path)
????#?file_list.sort()
????file_list.sort(key=lambda?x:?int(x[:-3]))
????file_list_?=?[]
????for?fn?in?file_list:
????????#?print(fn)
????????p?=?str("tsfiles"?+?'/'?+?fn)
????????file_list_.append(p)
????print(file_list_)
????return?file_list_
def?combine(ts_path,?file_name):
????file_list?=?file_walker(ts_path)
????file_path?=?file_name?+?'.MP4'
????with?open(file_path,?'wb+')?as?fw:
????????for?i?in?range(len(file_list)):
????????????fw.write(open(file_list[i],?'rb').read())
if?__name__?==?'__main__':
????urls?=?get_ts_urls("./data.txt")
????download(urls,?"tsfiles")
????combine("tsfiles",?"大理")
這個(gè)是依次下載的ts文件,都是一個(gè)個(gè)幾秒的小文件。
之后使用【吳老板】小教程上的合并combine()函數(shù)對這些ts文件進(jìn)行合并,得到一個(gè)mp4文件,如下圖所示。

后來【孤獨(dú)】大佬提出還可以使用ffmpeg庫進(jìn)行下載,使用命令:ffmpeg -allowed_extensions ALL -i m3u8鏈接 -c copy 輸出視頻,感興趣的小伙伴們也可以試試看,方法還是很多的。
三、總結(jié)
大家好,我是Python進(jìn)階者。這篇文章主要分享了Python下載m3u8格式視頻的問題,針對該問題給出了具體的解析和代碼演示,幫助粉絲順利解決了問題。
最后感謝粉絲【頑皮Dolly】提問,感謝【皮皮】、【吳老板】、【孤獨(dú)】給出的具體解析和代碼演示,感謝【dcpeng】、【馮誠】、【冷喵】、【阿策~】、【瑜亮老師】等人參與學(xué)習(xí)交流。
小伙伴們,快快用實(shí)踐一下吧!如果在學(xué)習(xí)過程中,有遇到任何Python問題,歡迎加我好友,我拉你進(jìn)Python學(xué)習(xí)交流群共同探討學(xué)習(xí)。
-------------------?End?-------------------
往期精彩文章推薦:

歡迎大家點(diǎn)贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學(xué)習(xí)群請?jiān)诤笈_回復(fù)【入群】
萬水千山總是情,點(diǎn)個(gè)【在看】行不行
