Python爬取動態載入的視訊(梨視訊,xpath)

coutuixixia發表於2022-03-21

步驟 

1.選擇一個生活頁面,按F12,選擇Elements欄,點選左邊的箭頭,把滑鼠移到某個視訊上面,下欄會定位到其所在的標籤,發現這些標籤都是在<li class="categoryem">標籤下

2.迴圈li標籤內的a標籤裡href的內容,拼接後是每個視訊的詳情頁地址

3.在視訊詳情頁上,檢視視訊詳情頁面的載入方式,發現網頁原始碼中找不到,說明該頁面是動態載入的,這樣就無需向詳情頁傳送請求了直接向該地址傳送即可(傳送了也找不到)

4.通過network檢視詳情頁的請求網址 chenchen.cc

5.朝該詳情頁傳送請求發現獲取不到


import requests

url='

headers={

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.2242 SLBChan/23'

}

video_page=requests.get(url=url,headers=headers).content

with open('./a.html','wb') as fp:

    fp.write(video_page)


   "resultCode":"5",

   "resultMsg":"該文章已經下線!",

   "systemTime": "1647781607669"

}

6.原因是有防爬措施之防盜鏈,得定義一個請求頭加上Referer引數再去請求網站

7.去瀏覽器上覆制視訊的地址發現與我們拿到的有地方不一樣

8.接著去想如何去替換核心資料,去拿到真正的視訊地址,研究發現通過systemTime即可

 

 {

    "resultCode":"1",

    "resultMsg":"success", "reqId":"8544a57d-1ad8-4d74-83ca-740fd9960052",

    "systemTime": "1647780126911",

    "videoInfo":{"playSta":"1","video_image":"https://image1.pearvideo.com/cont/20220318/11549967-150204-1.png","videos":{"hdUrl":"","hdflvUrl":"","sdUrl":"","sdflvUrl":"","srcUrl":"}}

}


程式碼示例

複製

#匯入模組

import requests

from lxml import etree

import time

import os

# 建立存放視訊的目錄

if not os.path.exists(r'./video'):

    os.mkdir(r'./video')

#1.生活頁面的url

url='

#UA偽裝

headers={

    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 SLBrowser/8.0.0.2242 SLBChan/23'

}

#2.傳送get請求獲取頁面資料

page_text=requests.get(url=url,headers=headers).text

# 3.使用xpath進行資料解析

#3.1.例項化,將網上獲取的原始碼資料載入到該物件中

tree=etree.HTML(page_text)

# 3.2解析出視訊詳情連結

li_list=tree.xpath('//*[@id="listvideoListUl"]/li')

for li in li_list:

    #1.解析出視訊連結相對地址href="video_1755550"

    datail_url=li.xpath('./div/a/@href')[0]

    #解析出視訊名稱

    name=li.xpath('./div/a/div[2]/text()')[0]+'.mp4'

    # 每個視訊的href _後面的一串數字都不同,將其拆分取出

    video_id = datail_url.split('_')[-1]

    #視訊詳情頁的url

    video_url='

    headers = {

        "Referer": "%s" % video_id #Referer告訴伺服器我是從哪個頁面連結過來的

    }

    #2.發起請求,獲取視訊詳情頁資料

    res1 = requests.get(url=video_url,params={'contId': video_id},headers=headers)

    # 避免訪問次數過多,延遲

    time.sleep(1)

    #返回json物件

    data_dict = res1.json()

    #視訊地址srcUrl

    src_url = data_dict['videoInfo']['videos']['srcUrl']

    systemTime = data_dict['systemTime']

    #通過字串替換拼接成真正地址

    real_url = src_url.replace(systemTime, 'cont-%s' % video_id)

    #發起請求,獲取視訊二進位制資料

    res2 = requests.get(real_url).content

    #拼接成視訊儲存路徑

    file_path = os.path.join('./video', name)

    #進行持久化儲存

    with open(file_path, 'wb')as fp:

        fp.write(res2) #寫入

    print('%s 下載成功' % name)

-----------------------------------

©著作權歸作者所有:來自51CTO部落格作者caichen.cc的原創作品,請聯絡作者獲取轉載授權,否則將追究法律責任

Python爬取動態載入的視訊(梨視訊,xpath)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69920392/viewspace-2878995/,如需轉載,請註明出處,否則將追究法律責任。

相關文章