python爬取梨視頻生活板塊最熱視頻
完整代碼如下:
import requests from lxml import etree import random import os from multiprocessing.dummy import Pool if not os.path.exists('./視頻'): os.mkdir('./視頻') urls=[] url='https://www.pearvideo.com/category_5' headers={'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36 Edg/89.0.774.45'} page_text=requests.get(url=url,headers=headers).text tree=etree.HTML(page_text) li_list=tree.xpath('//ul[@id="listvideoListUl"]/li') for li in li_list: a_url='https://www.pearvideo.com/'+li.xpath('./div/a/@href')[0] name=li.xpath('./div/a/div[2]/text()')[0]+'.mp4' mrd=random.random() code=li.xpath('./div/a/@href')[0][-7:] new_headers={'Referer': a_url, 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 Edg/89.0.774.50' } new_url='https://www.pearvideo.com/videoStatus.jsp?contId='+str(code)+'&mrd='+str(mrd) r=requests.get(url=new_url,headers=new_headers) video_url=eval(r.text)['videoInfo']['videos']['srcUrl'] old=video_url.split('/')[-1].split('-')[0] new='cont-'+str(code) true_video_url=video_url.replace(old,new) dic={'name':name, 'my_url':true_video_url} urls.append(dic) #使用線程池對數(shù)據(jù)視頻進行請求 def get_video_data(dic): print(dic['name']+'開始下載'+'\n') data_url=dic['my_url'] data=requests.get(url=data_url,headers=headers).content with open('./視頻/'+dic['name'],'wb') as f: f.write(data) print(dic['name']+'下載成功') pool=Pool(4) pool.map(get_video_data,urls) pool.close() pool.join()
說明:
當前日期(2021/3/14)版本的梨視頻的視頻偽url由ajax獲取。
部分代碼解釋:
1:模塊
import requests #網(wǎng)路爬蟲標準庫(代替urllib) from lxml import etree #用于解析頁面信息 import random #梨視頻的url中有一段需要隨機數(shù) import os #主要用于生成文件夾存放視頻 from multiprocessing.dummy import Pool #導入線程池對應類
2:獲取視頻偽url
#參數(shù)準備 mrd=random.random() code=li.xpath('./div/a/@href')[0][-7:] new_headers={ 'Referer': a_url, 'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36 Edg/89.0.774.50' } #獲取url new_url='https://www.pearvideo.com/videoStatus.jsp?contId='+str(code)+'&mrd='+str(mrd) r=requests.get(url=new_url,headers=new_headers) video_url=eval(r.text)['videoInfo']['videos']['srcUrl']
3:獲取真正url
經(jīng)本人實驗,使用上文獲得的url爬取視頻下載內(nèi)容為空。
由于本人也是菜鳥,所以百思不得其解,恰巧看到B站用戶”_千戶”的留言才得知真?zhèn)蝩rl的差異:
此處視頻地址做了加密即ajax中得到的地址需要加上cont-,并且修改一段數(shù)字為id才是真地址
真地址:"https://video.pearvideo.com/mp4/third/20201120/cont-1708144-10305425-222728-hd.mp4"
偽地址:"https://video.pearvideo.com/mp4/third/20201120/1606132035863-10305425-222728-hd.mp4"
#僅需要做幾個簡單的截取切片操作就可以替換相關(guān)內(nèi)容 old=video_url.split('/')[-1].split('-')[0] new='cont-'+str(code) true_video_url=video_url.replace(old,new)
4:存儲
#使用線程池對數(shù)據(jù)視頻進行請求 def get_video_data(dic): print(dic['name']+'開始下載'+'\n') data_url=dic['my_url'] data=requests.get(url=data_url,headers=headers).content with open('./視頻/'+dic['name'],'wb') as f: f.write(data) print(dic['name']+'下載成功') pool=Pool(4) pool.map(get_video_data,urls) pool.close() pool.join()
5:結(jié)果
到此這篇關(guān)于python爬取梨視頻生活板塊最熱視頻的文章就介紹到這了,更多相關(guān)python爬取梨視頻內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫實例
這篇文章主要介紹了Python MySQLdb模塊連接操作mysql數(shù)據(jù)庫實例,本文直接給出操作mysql代碼實例,包含創(chuàng)建表、插入數(shù)據(jù)、插入多條數(shù)據(jù)、查詢數(shù)據(jù)等內(nèi)容,需要的朋友可以參考下2015-04-04關(guān)于jupyter lab安裝及導入tensorflow找不到模塊的問題
這篇文章主要介紹了關(guān)于jupyter lab安裝及導入tensorflow找不到模塊的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03使用Python將xmind腦圖轉(zhuǎn)成excel用例的實現(xiàn)代碼(一)
這篇文章主要介紹了使用Python將xmind腦圖轉(zhuǎn)成excel用例的實現(xiàn)代碼(一),本文給大家介紹的非常詳細對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10Python+Pygame實戰(zhàn)之泡泡游戲的實現(xiàn)
這篇文章主要為大家介紹了如何利用Python中的Pygame模塊實現(xiàn)泡泡游戲,文中的示例代碼講解詳細,對我們學習Python游戲開發(fā)有一定幫助,需要的可以參考一下2022-07-07Django admin實現(xiàn)TextField字段changelist頁面換行、空格正常顯示
本文主要介紹了Django admin實現(xiàn)TextField字段changelist頁面換行、空格正常顯示,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01