1. 程式人生 > >python之梨視訊網站視訊爬取及下載

python之梨視訊網站視訊爬取及下載

這次爬取網站結構較為簡單,適用於初學爬蟲!
這次學習需要先把python和pip的環境配好,還需要引入一些包**(re,lxml,os,requests)**
直接在cmd中進行 pip install 包名就可以成功安裝啦。

一、觀察和分析網站

第一步、開啟網站,轉到美食的頁面,之後按下f12,再選擇network,選擇XHR,這是ajax加載出來與頁面相關的,按下f5重新整理一些,可以看到這個Request URL,這個網址在瀏覽器中開啟就是該頁面的網址,ategoryId=6這個6代表的就是美食這一欄,也就是我們要爬取的頁面,start=12代表是最開始的在頁面上顯示的12個視訊。
網站地址:

梨視訊美食
在這裡插入圖片描述
如果滾輪往下移,點選載入頁面,就會發現多一個連結,他的Request URL中的start=24,也就是載入了24個視訊
在這裡插入圖片描述
第二步、我們再在剛才的頁面上右鍵檢查頁面原始碼
找到第一個視訊的程式碼位置,找到vedio-數字,再點開第該視訊的播放頁面,發現這個vedio-數字正好是對應的就是
在這裡插入圖片描述

二、獲取視訊資訊

最開始先引入一些需要使用的

import requests
from lxml import etree 
import re
from urllib.request import urlretrieve
import os

第一步、首先寫一個獲取頁面原始碼的函式

def
get_html(url): response = requests.get(url) if response.status_code == 200:#確認狀態碼為200 return response.text #如果成立就返回頁面原始碼,有誤就是返回空 else: return None def main(): url = 'http://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=6&start=12 html =
get_html(url) print(html) if __name__ == '__main__': main()

第二步、解析主頁面
用的是etree模組,用它來分析頁面原始碼,之後找到剛剛的vedio-數字,利用xpath把視訊的id找出來,之後再把視訊播放的地址連線起來
其中的append是把剛剛拼接好的播放地址,存到一個list列表中,方便下面對每個地址進行遍歷。

def get_vedio(url):
    html = get_html(url)										#呼叫上面的獲取原始碼的函式
    html = etree.HTML(html)								#解析頁面
    video_id = html.xpath('//div[@class="vervideo-bd"]/a/@href') 	#用過該標籤的xpath找到視訊id
    
    video_url = []								                #宣告一個list
    starturl = 'http://www.pearvideo.com/			#主視訊地址

    for id in video_id: 					
        newurl = starturl + id			# 拼接每一個視訊播放的地址
        video_url.append(newurl)   #獲取視訊播放地址
        print(newurl)					

第三步、得到視訊真正播放地址
在這裡插入圖片描述
開啟頁面原始碼,找到如下連結,通過一個迴圈,將這個頁面上的原始碼獲取出來,之後用正則匹配視訊真正的播放地址匹配出來。

    for play_url in video_url:
        html = get_html(play_url)
        real_url = re.compile('srcUrl="(.*?)"')				#增加效率
        real_url = re.findall(real_url,html)
        #獲取視訊名稱
        video_name = re.compile('<h1 class="video-tt">(.*?)</h1>')
        video_name = re.findall(video_name,html)
        print(video_name,real_url)

三、下載視訊

通過urlretrieve方法下載視訊

def download_vedio(real_url,video):
    #自己設定一個路徑
    path = 'D:\\python Projects\\pyDownloadPictrues\\18-7-18梨視訊\\{}.mp4'.format(video)
    if not os.path.exists(path):					#判斷有沒有這個路徑,這個可以自己設定的,不一定要和我一樣,設定為'D:\\vedios\\{}.mp4'.format(video)'也是可以的
        print("正在下載:{}".format(video))
        urlretrieve(real_url, path)                # 下載url,下載資料夾
        print('ok!!!!!')
    else:
        print('no!!!!!')

主函式設定一下迴圈:

def main():
    sum = 0				                      #視訊的總數量
    while True:			                      #一個while迴圈
        if sum > 48:		                      #如果獲取到48個視訊的時候就返回空,就是退出程式
            return			
        url = 'http://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=6&start={}'.format(sum)							
        #最開始分析網站的的網址,format(sum),代表的就是視訊的頁面顯示的總數
        sum += 12					        #分析的時候每次往下載入的時候增加12個視訊
        get_vedio(url)				        #呼叫上面獲取視訊的函式
if __name__ == '__main__':		#判斷是否為當前檔案
    main()										#執行main函式

到這裡我們爬取就結束了,其實還有很多操作都沒有進行的,現在只是成功的把視訊下載下來,後續還可以將視訊的釋出時間,點贊評論數給獲取下來,儲存到資料庫,需要同學們自己慢慢挖掘了。