1. 程式人生 > 程式設計 >基於python爬取梨視訊實現過程解析

基於python爬取梨視訊實現過程解析

目標網址:梨視訊

然後我們找到科技這一頁:https://www.pearvideo.com/category_8。其實你要哪一頁都行,你喜歡就行。嘿嘿…

這是動態網站,所以咱們直奔network 然後去到XHR:

基於python爬取梨視訊實現過程解析

找規律,這個應該不難,我就直接貼網址上來咯,想要鍛鍊的可以找找看哈:

https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=8&start=0

這個就是我們要找的目標網址啦,後面的0就代表頁數,讓開啟這個網頁發現是靜態網頁,這最好搞啦,直接上:

基於python爬取梨視訊實現過程解析

程式碼如下:

import requests
import parsel,re
import os
target = "https://www.pearvideo.com/videoStatus.jsp?contId="

url = "https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start=0"
res = requests.get(url)
res.encoding="utf-8"
html = parsel.Selector(res.text)
lists = html.xpath('/html/body/li/div/a/@href').getall()
for each in lists:

  print("https://www.pearvideo.com/"+each)

output;
https://www.pearvideo.com/video_1703486
https://www.pearvideo.com/video_1703189
https://www.pearvideo.com/video_1703161
https://www.pearvideo.com/video_1702880
https://www.pearvideo.com/video_1702773
...

順利拿到,然後進入播放頁面,卻發現找不到MP4視訊,怎麼辦?經過我一番努力(扯掉了幾十根頭髮後)發現,它在另外一個網址裡面

基於python爬取梨視訊實現過程解析

咋辦?當然要想辦法把這個網址搞到手啦,仔細分析下,發現這個網址非常陌生呀,唯一稍微熟悉點的就是那串數字了,前面我們拿到播放頁的網址後面那串數字和這個對比,完全是一模一樣的,這樣的話那就好搞了,咱們直接用拼接的方式把它接上去就可以了,看程式碼:

for each in lists:
  url_num = each.replace('video_',"")
  urls = target+url_num
  print(urls)
``

```python
output:
https://www.pearvideo.com/videoStatus.jsp?contId=1703486
https://www.pearvideo.com/videoStatus.jsp?contId=1703189
https://www.pearvideo.com/videoStatus.jsp?contId=1703161
https://www.pearvideo.com/videoStatus.jsp?contId=1702880
https://www.pearvideo.com/videoStatus.jsp?contId=1702773
https://www.pearvideo.com/videoStatus.jsp?contId=1702633
...

出來了,好像稍微有點不一樣,後面那啥&mrd=***************** 沒有,怎麼辦?沒有就不要唄,看過我發的百度圖片那篇的朋友都懂,網址裡面有些東西是不需要的,純粹是搞咱們這些玩爬蟲的,噁心咱們。不過沒辦法,畢竟是咱們要去爬人家的資料的。

網址問題解決了,但是點進去一看,發現這東東:

基於python爬取梨視訊實現過程解析

恩,很明顯,是遇到反爬機制了,這個好搞,要什麼給什麼就行,程式碼如下:

	headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/86.0.4240.111 Safari/537.36','Referer': 'https://www.pearvideo.com/video_'+ str(url_num)
  }
  html = requests.get(urls,headers=headers).text
  print(html)

基於python爬取梨視訊實現過程解析

搞定!!

最後我們看一下MP4能不能播放:

基於python爬取梨視訊實現過程解析

西八!404!!恩,這裡就稍微有點麻煩了,還得找資料,把裡面的時間戳改成 ‘cont-數字‘,感覺寫了好多,手都有點累了,我就直接上程式碼了:

import requests
import parsel,re
import os


 
target = "https://www.pearvideo.com/videoStatus.jsp?contId="

url = "https://www.pearvideo.com/category_loading.jsp?reqType=5&categoryId=9&start=0"
res = requests.get(url)
res.encoding="utf-8"
html = parsel.Selector(res.text)
lists = html.xpath('/html/body/li/div/a/@href').getall()
# print(lists[2:])
# 提取視訊後面的數字,數字是最重要的,需要傳給 Referer 和 urls
for each in lists:
  url_num = each.replace('video_',"")
  urls = target+url_num
  # print(urls)
  headers = {
  'User-Agent': 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML,headers=headers).text
  
  cont = 'cont-' + str(url_num)

  # 提取 mp4 視訊
  srcUrl = re.findall(f'"srcUrl":"(.*?)"',html)[0]
  # 替換視訊裡面的時間戳,改為可以真正播放的資料
  new_url = srcUrl.replace(srcUrl.split("-")[0].split("/")[-1],cont)
  print(new_url)
  

  # 使用視訊字尾當視訊名稱
  filename = srcUrl.split("/")[-1]

  # 儲存到本地
  with open("./images/"+filename,"wb") as f:
    f.write(requests.get(new_url).content)

基於python爬取梨視訊實現過程解析

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。