如何爬取視訊的爬蟲程式碼原始碼
爬取梨視訊短視訊原始碼
首先放B站教學連結,如果對爬蟲感興趣的朋友可以去康一下原教程,講得真的很不錯;
連結:https://www.bilibili.com/video/BV1Yh411o7Sz?t=13&p=44
廢話不多說,開搞;
需求:主要是從首頁爬取當前最熱的視訊集,單個頁面涉及到3次請求;
難點:
1.【首頁url】-【詳情頁url】-【視訊url】,其中視訊url目前由AJAX儲存,並且AJAX頁面中的視訊地址還需要進一步解碼;
利用開發者工具得到的視訊連結:https://video.pearvideo.com/mp4/third/20201225/cont-1713375-10305425-120340-hd.mp4
ajax儲存的視訊連結:
https://video.pearvideo.com/mp4/third/20201225/1608982451558-10305425-120340-hd.mp4
2.獲取ajax的連結在post的請求中除了headers也需要加入Referer也就是跳轉前網頁(詳情頁)的url;
3.ajax中post請求mrd引數需要用隨機數進行賦值;
首頁:
詳情頁:
import requests
from multiprocessing.dummy import Pool
from lxml import etree
import random
import re
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"
}
#原則:執行緒池處理的是阻塞且耗時的操作
url = 'https://www.pearvideo.com/category_5'
video_info = requests.get(url = url, headers= headers).text
tree = etree.HTML(video_info)
li_list = tree.xpath('//div[@class = "category-top"]//li[@class = "categoryem "]')
urls = [] #儲存所有視訊的連結和名字
for li in li_list:
title = li.xpath('.//div[@class = "vervideo-title"]/text()')[0] + '.mp4'
detail_url = 'https://www.pearvideo.com/' + li.xpath('.//a/@href')[0]
#對詳情頁的URL發請求
detail_url_page = requests.get(url = detail_url,headers =headers).text
#從詳情頁中解析出視訊的地址(url)
detail_tree = etree.HTML(detail_url_page)
content = detail_tree.xpath('//div[@class = "img prism-player play"]/video/@src')
post_url = "https://www.pearvideo.com/videoStatus.jsp?"
post_headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
"Referer":detail_url
}
video_id = detail_url.split('_')[1]
data = {
'contId':str(video_id),
'mrd':str(random.random())
}
response_page = requests.post(url = post_url, data = data,headers= post_headers).text
ex = 'srcUrl":"(.*?)"}}'
video_fake_url = re.findall(ex,response_page)[0]
ex = 'srcUrl":"(.*?)"}}'
video_fake_url = re.findall(ex, response_page)[0]
video_fake_url_split = re.split('(/)', video_fake_url)
#主要是為了拼接正確的視訊url
target_str = re.split('(-)',video_fake_url_split[-1])
target_str_process = [f'cont-{video_id}' if x == target_str[0] else x for x in target_str]
target_str_process_link = "".join(target_str_process)
video_fake_url_split_process = [target_str_process_link if x == video_fake_url_split[-1] else x for x in video_fake_url_split]
video_url = "".join(video_fake_url_split_process)
dic = {
'name':title,
'url':video_url
}
urls.append(dic)
print(urls)
def get_video_data(dic):
url = dic['url']
print(dic["name"],"正在下載.......")
data = requests.get(url = url, headers = headers).content
with open(dic['name'],'wb') as fp:
fp.write(data)
print(dic["name"],'下載成功!')
#使用執行緒池對視訊資料進行請求
pool = Pool(4)
pool.map(get_video_data,urls)
pool.close()
pool.join()
完畢,歡迎交流~
相關文章
- 用一段爬蟲程式碼爬取高音質音訊示例爬蟲音訊
- 新手小白的爬蟲神器-無程式碼高效爬取資料爬蟲
- 不用寫程式碼的爬蟲爬蟲
- 爬蟲錯誤程式碼如何解決?爬蟲
- Python爬蟲入門教程 50-100 Python3爬蟲爬取VIP視訊-Python爬蟲6操作Python爬蟲
- 爬蟲爬取微信小程式爬蟲微信小程式
- 如何合理控制爬蟲爬取速度?爬蟲
- Java爬蟲-爬取疫苗批次資訊Java爬蟲
- Python爬蟲訓練:爬取酷燃網視訊資料Python爬蟲
- python爬蟲練習--爬取虎牙主播原畫視訊Python爬蟲
- 如何提高爬取爬蟲採集的效率?爬蟲
- 新手寫的視訊爬蟲爬蟲
- python爬蟲——爬取大學排名資訊Python爬蟲
- python爬蟲--爬取鏈家租房資訊Python爬蟲
- python爬蟲爬取網頁中文亂碼問題的解決Python爬蟲網頁
- Python 萬能程式碼模版:爬蟲程式碼篇Python爬蟲
- 利用爬蟲採集音訊資訊完整程式碼示例爬蟲音訊
- 爬蟲:多程式爬蟲爬蟲
- 爬蟲爬取資料如何繞開限制?爬蟲
- 使用 Scrapy 爬取股票程式碼
- 爬取行政區劃程式碼
- 小白學 Python 爬蟲(25):爬取股票資訊Python爬蟲
- 上天的Node.js之爬蟲篇 15行程式碼爬取京東資源Node.js爬蟲行程
- Python爬蟲實戰:爬取淘寶的商品資訊Python爬蟲
- 爬蟲的代理ip怎麼用程式碼爬蟲
- 手把手教你利用爬蟲爬網頁(Python程式碼)爬蟲網頁Python
- python爬蟲---網頁爬蟲,圖片爬蟲,文章爬蟲,Python爬蟲爬取新聞網站新聞Python爬蟲網頁網站
- 新一代爬蟲平臺!不寫程式碼即可完成爬蟲...爬蟲
- 手把手教你網路爬蟲(爬取豆瓣電影top250,附帶原始碼)爬蟲原始碼
- Python爬蟲之小說資訊爬取與資料視覺化分析Python爬蟲視覺化
- 爬蟲之股票定向爬取爬蟲
- 如何保障爬蟲高效穩定爬取資料?爬蟲
- 5 行程式碼就能入門爬蟲?行程爬蟲
- Python開發爬蟲專案+程式碼Python爬蟲
- Python使用多程式提高網路爬蟲的爬取速度Python爬蟲
- Python網路爬蟲之爬取淘寶網頁頁面 MOOC可以執行的程式碼Python爬蟲網頁
- Python爬蟲爬取淘寶,京東商品資訊Python爬蟲
- 提高爬蟲爬取效率的辦法爬蟲