梨視頻爬取攻略


梨視頻爬取攻略

思路

1.打開網址查看數據加載方式,具體步驟是打開網絡源碼查看視頻數據是否存在
2.存在為直接加載,不存在為js動態申請,發現數據為js動態加載
3.打開network查看url地址,請求方式,視頻文件多為get請求
4.獲取首頁所有詳細頁面地址后,執行循環向詳細頁面地址發送請求
5.進入詳細頁面時,查看視頻加載方式
6.network查看url地址,請求方式,請求體或請求頭文件
systemTime
srcUrl
7.獲取信息后,發現不是視頻數據
8.再對請求結果的觀察中發現真實地址與請求結果地址有相似的地方,但也有不同的地方
9.通過特定的值將請求結果地址替換為真實地址,利用視頻ID與systemTIme進行替換,就可以發送求獲得視頻
10.梨視頻存在防爬鏈,需要在請求返回值中查找referer鍵值對
11.將referer鍵值對,作為請求頭加入請求
12.向視頻的地址發送請求獲取視頻信息
13.最好設置時間間隔,不要太頻繁

實際操作

調用模塊

import requests
'''
requests模塊主要用於網絡請求獲取數據,請求方式主要為get和post,本次實驗會用到get
'''
from bs4 import BeautifulSoup
'''
從bs4集合中獲取BeautifulSoup,其主要識別'html'和'lxml'的文本內容,並且有多個選擇器可以篩選結果
'''
import os
'''
os模塊運用於操作文本格式的文件
'''

進入官網查看,查看數據請求方式,右鍵檢查,發現是間接加載

     按f12或右鍵檢查呼出后端界面。查看network,需要下拉或刷新頁面獲取請求信息,可以看到url和請求方式,在Paramerters中categoryld是用來定義視頻的種類,start為頁面視頻數量,為12的倍數,我們可以通過在請求頭中對這些數據進行更改,來獲得多個視頻的量

# 發送get請求網址
res=requests.get('https://www.pearvideo.com/category_9',
                 params={"reqType": 5,
                         "categoryId": 9,
                         "start":page_id})
# 構造解析對象
soup=BeautifulSoup(res.text,'lxml')
# 獲取li列表中a鏈接標簽
li_class=soup.select('.categoryem a.vervideo-lilink')

 

 獲取需要的詳情ID后,要去進行ID拼接才能請求進入詳情界面

用瀏覽器進入詳情頁面后,打開后端,刷新頁面,查看請求信息中的url與請求方式,獲取源地址信息

# 循環獲取視頻地址
for a_href in li_class:
    # 獲取網址具體地址
    a_list_href=a_href.get('href')
    # 獲取網絡ID
    video_id=a_list_href.split('_')[-1]
    # print(video_id)
    # 發送請求
    res2=requests.get('https://www.pearvideo.com/videoStatus.jsp?',
                      # 請求體確定視頻
                      params={"contId": video_id},
                      # 請求頭輸入防爬鏈
                      headers={"Referer": "https://www.pearvideo.com/video_%s"%video_id},
                      )

 

但是打開url地址后,並沒有視頻,所以這不是我么們要的視頻地址

 

 那真正的視屏地址在哪呢,首先運行視頻,打開頁面的網絡源碼后,查找video標簽,那才是視頻地址

 

 可以發現真實地址與請求的家地址存在相同卻又不相似的地方,而假地址的不同數據就是請求數據中獲得的systmeTime,所以把家地址中的systemTime中的數據替換成真地址中的數據即可獲取事情內容,真地址的不同處為'cont-'加上述首頁程序獲取的video_id號,便可請求視頻數據

    # 因為是json格式,使用json轉義對應數據,獲取假的視頻地址
    fake_href=res2.json()["videoInfo"]["videos"]['srcUrl']
    # print(fake_href)
    # 獲取沖突值
    systemtime=res2.json()["systemTime"]
    # 將假地址變成真地址
    real_href=fake_href.replace(systemtime,'cont-%s'%video_id)
    # 發送請求
    res4=requests.get(real_href,
                      # 請求體確定視頻
                      params={"contId": video_id},
                      # 請求頭輸入防爬鏈
                      headers={"Referer": "https://www.pearvideo.com/video_%s" % video_id},
                      )

 

梨視頻官網存在防爬鏈,所以要在請求頭加入該數據

    # 路徑拼接
    file_path=os.path.join(r'視頻',real_href[-8:])
    # 打開路徑,以二進制寫入
    with open(file_path,'wb') as f:
        # 寫入數據
        f.write(res4.content)
    # 提示成功
    print("親下載成功")

如果訪問過於頻繁,網站地址會把電腦IP封掉,所以最好加個訪問延遲,減緩工作量避免被防封號 

    # 等待時間
    time.sleep(1)

執行結果

 

 

返回目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM