python爬蟲(chóng)線程池案例詳解(梨視頻短視頻爬取)
python爬蟲(chóng)-梨視頻短視頻爬取(線程池)
示例代碼
import requests from lxml import etree import random from multiprocessing.dummy import Pool # 多進(jìn)程要傳的方法,多進(jìn)程pool.map()傳的第二個(gè)參數(shù)是一個(gè)迭代器對(duì)象 # 而傳的get_video方法也要有一個(gè)迭代器參數(shù) def get_video(dic): headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.56' } video_data = requests.get(url = dic['url'] , headers = headers).content print(dic['name']+'開(kāi)始下載') # 有的文件名中包含空格,在并發(fā)執(zhí)行時(shí)會(huì)報(bào)錯(cuò),這里用隨機(jī)數(shù)給文件起名了 #path = dic['name']+'.mp4'會(huì)報(bào)錯(cuò) path = "./lishipin/"+str(int(random.random()*100)) + '.mp4' with open(path,'wb') as fp: fp.write(video_data) print(dic['name']+'下載成功') def main(): # web_url:梨視頻官網(wǎng) web_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/88.0.4324.96 Safari/537.36 Edg/88.0.705.56' } # web_page_tex:官網(wǎng)頁(yè)面 web_page_text = requests.get(url = web_url,headers = headers).text tree = etree.HTML(web_page_text) # 解析梨視頻官網(wǎng)“生活欄”中的所有l(wèi)i標(biāo)簽,遍歷li標(biāo)簽,提取視頻的url li_list = tree.xpath('//*[@id="listvideoListUl"]/li') rea_urls=[] for li in li_list: # video_name獲取視頻的名稱 video_name = li.xpath('./div/a/div[2]/text()')[0]+'.mp4' # 加上'https://www.pearvideo.com/'得到完整的video_url video_url = 'https://www.pearvideo.com/'+li.xpath("./div/a/@href")[0] # 通過(guò)官網(wǎng)界面提取的url,并不是真正的url, # 因?yàn)镸P4的視頻是動(dòng)態(tài)加載出來(lái)的,所以通過(guò)ajax請(qǐng)求獲取視頻的真實(shí)網(wǎng)址 # 但是通過(guò)分析發(fā)現(xiàn),ajax請(qǐng)求獲取的網(wǎng)址是一個(gè)偽網(wǎng)址,和真實(shí)網(wǎng)址有區(qū)別(cont...) ##真地址:https://video.pearvideo.com/mp4/third/20210208/cont-1719874-15690592-205957-ld.mp4 ## 1719874 ##偽地址:https://video.pearvideo.com/mp4/third/20210208/1612867876612-15690592-205957-ld.mp4 # 通過(guò)得到的video_url可以分析到 真假網(wǎng)址 不同的細(xì)節(jié)之處--countId # 通過(guò)ajax請(qǐng)求向video_url發(fā)起get請(qǐng)求,需要加countId和mrd參數(shù) # 分析video_url得到countId,mrd是一個(gè)隨機(jī)小樹(shù) countId = video_url.split("/")[-1].split("_")[1] mrd = random.random() # 加'Referer'參數(shù),否則會(huì)顯示該視頻已下架了 headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36 Edg/88.0.705.56', 'Referer': 'https://www.pearvideo.com/video_' + countId } ajax_url = 'https://www.pearvideo.com/videoStatus.jsp' # 利用ajax請(qǐng)求獲取偽地址 # https://www.pearvideo.com/videoStatus.jsp?contId=1719874&mrd=0.7759942025851074 params = { 'contId': str(countId), 'mrd': str(mrd) } # 通過(guò)ajax請(qǐng)求,發(fā)起get請(qǐng)求得到一個(gè)json串 ajax_json = requests.get(url = ajax_url,headers = headers,params = params).json() # 得到的是 假地址 fake_url = ajax_json['videoInfo']['videos']['srcUrl'] # 對(duì)假地址進(jìn)行處理,并把剛才的countId組合起來(lái) fake_url_list = fake_url.split('/') end = fake_url_list.pop() #刪除不必要的字符串 end_list = end.split("-") end_url = "" #end_url是一個(gè)結(jié)尾字符串 for i in range(len(end_list)-1): end_url = end_url + "-"+ end_list[i+1] # 真實(shí)的地址,先用假地址,然后組合countId rea_url="" for element in fake_url_list: rea_url=rea_url+element+"/" rea_url=rea_url+"cont-"+str(countId) + end_url # print(rea_url) dic = { 'url':rea_url, 'name':video_name } rea_urls.append(dic) #print(rea_urls) pool = Pool(4) pool.map(get_video,rea_urls) pool.close() pool.join() if __name__ == '__main__': main()
知識(shí)點(diǎn)擴(kuò)展:
Python爬蟲(chóng)下載視頻(梨視頻)
梨視頻示例:Ctrl+Alt+L格式化代碼
import re import requests import hashlib import time # print(respose.status_code)# 響應(yīng)的狀態(tài)碼 # print(respose.content) #返回字節(jié)信息 # print(respose.text) #返回文本內(nèi)容 mainurl = "https://www.pearvideo.com/" videourl = "http://www.pearvideo.com/video_1499584" headers={ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'Accept-Encoding':'gzip, deflate, sdch', 'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 'Accept-Language':'zh-CN,zh;q=0.8', } # 獲取視頻鏈接列表 def geturls(url): res=requests.get(url) urls=re.findall('class="vervideo-tbd".*?href="(.*?)" rel="external nofollow" ',res.text,re.S) urllist=[] for i in urls: prefix='https://www.pearvideo.com/' urllist.append(prefix+i) return urllist # 獲取視頻鏈接并下載(寫(xiě)入到硬盤(pán)) def getvideo(url): res=requests.get(url,headers) mp4url=re.findall('srcUrl="(.*?\.mp4)"',res.text,re.S)[0] video=requests.get(mp4url) m = hashlib.md5() m.update(url.encode('utf-8')) m.update(str(time.time()).encode('utf-8')) filename = r'%s.mp4' % m.hexdigest() print(filename) with open("/home/tony/文檔/爬蟲(chóng)視頻/%s.mp4"%filename,'wb') as f: f.write(video.content) def main(): video_urllist=geturls(mainurl) for i in video_urllist: getvideo(i) if __name__=='__main__': main()
到此這篇關(guān)于python爬蟲(chóng)線程池案例詳解(梨視頻短視頻爬取)的文章就介紹到這了,更多相關(guān)python爬蟲(chóng)梨視頻短視頻爬取內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python7個(gè)爬蟲(chóng)小案例詳解(附源碼)下篇
- Python7個(gè)爬蟲(chóng)小案例詳解(附源碼)中篇
- Python7個(gè)爬蟲(chóng)小案例詳解(附源碼)上篇
- 利用Python爬蟲(chóng)爬取金融期貨數(shù)據(jù)的案例分析
- Python爬蟲(chóng)采集Tripadvisor數(shù)據(jù)案例實(shí)現(xiàn)
- Python?Ajax爬蟲(chóng)案例分享
- Python爬蟲(chóng)入門(mén)案例之爬取去哪兒旅游景點(diǎn)攻略以及可視化分析
- Python爬蟲(chóng)入門(mén)案例之爬取二手房源數(shù)據(jù)
- Python爬蟲(chóng)入門(mén)案例之回車桌面壁紙網(wǎng)美女圖片采集
- Python爬蟲(chóng)之Scrapy環(huán)境搭建案例教程
- 用Python爬蟲(chóng)破解滑動(dòng)驗(yàn)證碼的案例解析
- python爬蟲(chóng)系列網(wǎng)絡(luò)請(qǐng)求案例詳解
- python爬蟲(chóng)破解字體加密案例詳解
- python爬蟲(chóng)scrapy框架的梨視頻案例解析
- python爬蟲(chóng)利器之requests庫(kù)的用法(超全面的爬取網(wǎng)頁(yè)案例)
- Python爬蟲(chóng)實(shí)戰(zhàn)案例之爬取喜馬拉雅音頻數(shù)據(jù)詳解
- Python爬蟲(chóng)Scrapy框架CrawlSpider原理及使用案例
- Python爬蟲(chóng)之對(duì)CSDN榜單進(jìn)行分析
相關(guān)文章
Python基于pycrypto實(shí)現(xiàn)的AES加密和解密算法示例
這篇文章主要介紹了Python基于pycrypto實(shí)現(xiàn)的AES加密和解密算法,結(jié)合實(shí)例形式分析了Python使用pycrypto模塊進(jìn)行AES加密與解密操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04python模擬預(yù)測(cè)一下新型冠狀病毒肺炎的數(shù)據(jù)
這篇文章主要介紹了python模擬預(yù)測(cè)一下新型冠狀病毒肺炎的數(shù)據(jù) ,需要的朋友可以參考下2020-02-02python 實(shí)現(xiàn)視頻流下載保存MP4的方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)視頻流下載保存MP4的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01PyCharm配置與更換鏡像源及安裝第三方庫(kù)的過(guò)程
這篇文章主要介紹了PyCharm配置與更換鏡像源及安裝第三方庫(kù)的過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01Python線程創(chuàng)建和終止實(shí)例代碼
這篇文章主要介紹了Python線程創(chuàng)建和終止實(shí)例代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Django Rest Framework構(gòu)建API的實(shí)現(xiàn)示例
本文主要介紹了Django Rest Framework構(gòu)建API的實(shí)現(xiàn)示例,包含環(huán)境設(shè)置、數(shù)據(jù)序列化、視圖與路由配置、安全性和權(quán)限設(shè)置、以及測(cè)試和文檔生成這幾個(gè)步驟,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08Python警察與小偷的實(shí)現(xiàn)之一客戶端與服務(wù)端通信實(shí)例
這篇文章主要介紹了Python警察與小偷的實(shí)現(xiàn)之一客戶端與服務(wù)端通信實(shí)例,并附有難點(diǎn)及易錯(cuò)點(diǎn)的分析與說(shuō)明,需要的朋友可以參考下2014-10-10python+pillow繪制矩陣蓋爾圓簡(jiǎn)單實(shí)例
這篇文章主要介紹了Python+pillow繪制矩陣蓋爾圓簡(jiǎn)單實(shí)例,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01