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