Python爬蟲入門教程 50-100 Python3爬蟲爬取VIP視頻-Python爬蟲6操做

爬蟲背景

原計劃繼續寫一下關於手機APP的爬蟲,結果發現夜神模擬器老是卡死,比較懶,不想找緣由了,哈哈,因此接着寫後面的博客了,從50篇開始要寫幾篇python爬蟲的騷操做,也就是用Python3經過爬蟲實現一些小工具。html

Python3 VIP視頻下載器

這種軟件或者網站滿天都是了,就是在線觀看收費網站的VIP視頻,你只要會玩搜索引擎或者是一個程序員基本都知道,雖然說一直在被封殺,可是能賺錢的地方就必定有人鑽漏洞。今天要實現的就是經過別人的API在Python中下載ts視頻到本地,本身去百度一下TS視頻是什麼吧。 python3圖片爬蟲python

找相關的接口

我隨便搜索了一下,那是很是多的,版權問題,就不放相關的地址了,固然在代碼中仍是會出現一下的。程序員

我找到這個接口應該是目前相對比較穩定的,而且還在更新的正則表達式

我看了一下,他中間主要經過三個API總體實現的頁面邏輯json

首先你先去優酷啊,騰訊啊,愛奇藝啊找個VIP視頻的地址,這個隨意啦api

我找了一個《葉問外傳》瀏覽器

http://v.youku.com/v_show/id_XNDA0MDg2NzU0OA==.html?spm=a2h03.8164468.2069780.5

python3圖片爬蟲

編寫代碼幾個步驟

在瀏覽器測試播放地址,獲得線路播放數據python爬蟲

http://y.mt2t.com/lines?url=https://v.qq.com/x/cover/5a3aweewodeclku/b0024j13g3b.html

在這裏插入圖片描述 在頁面的源碼中,請注意,打開開發者工具直接按快捷鍵F12便可,右鍵已經被鎖定。 在源碼中,發現真實的調用地址ide

python3圖片爬蟲

因此,你須要先匹配出來key來,很是簡單,使用正則表達式便可函數

import requests
import re
class VIP(object):
    def __init__(self):
        self.api = "http://y.mt2t.com/lines?url="
        self.url = "http://v.youku.com/v_show/id_XNDA0MDg2NzU0OA==.html?spm=a2h03.8164468.2069780.5"

    def run(self):
        res = requests.get(self.api+self.url)
        html = res.text

        key = re.search(r'key:"(.*?)"',html).group(1)
        print(key)

if __name__ == '__main__':
    vip = VIP()
    vip.run()

獲得key以後,就能夠進行獲取播放地址了,通過分析也能夠知道接口爲

Request URL: http://y.mt2t.com/lines/getdata
Request Method: POST

那麼只須要編寫一下便可

import requests
import re
import json

class VIP(object):
    def __init__(self):
        self.api = "http://y.mt2t.com/lines?url="
        self.post_url = "http://y.mt2t.com/lines/getdata"
        self.url = "http://v.youku.com/v_show/id_XNDA0MDg2NzU0OA==.html?spm=a2h03.8164468.2069780.5"

    def run(self):
        res = requests.get(self.api+self.url)
        html = res.text

        key = re.search(r'key:"(.*?)"',html).group(1)
        return key

    def get_playlist(self):

        key = self.run()

        data = {
            "url":self.url,
            "key":key
        }
        html = requests.post(self.post_url,data=data).text
        dic = json.loads(html)
        print(dic)

if __name__ == '__main__':
    vip = VIP()
    vip.get_playlist()

上面的代碼能夠獲得以下的數據集

python3圖片爬蟲 這個數據集須要解析一下,用來獲取播放地址,請注意還有一個接口咱們須要打通

Request URL: http://y2.mt2t.com:91/ifr/api
Request Method: POST

參數以下

url: +bvqT10xBsjrQlCXafOom96K2rGhgnQ1CJuc5clt8KDHnjH75Q6BhQ4Vnv7gUk+SpJYws4A93QjxcuTflk7RojJt0PiXpBkTAdXtRa6+LAY=
type: m3u8
from: mt2t.com
device: 
up: 0

這個API的全部參數都是從剛纔得到的數據集分解出來的 提取上面結果集中的URL

http://y2.mt2t.com:91/ifr?url=%2bbvqT10xBsjrQlCXafOom96K2rGhgnQ1CJuc5clt8KDHnjH75Q6BhQ4Vnv7gUk%2bSpJYws4A93QjxcuTflk7RojJt0PiXpBkTAdXtRa6%2bLAY%3d&type=m3u8

對這個URL進行分解,這個地方你須要瞭解通常狀況下URL進行哪些符號的特殊編碼

大小寫都有可能

符號 特殊編碼
+ %2d
/ %2f
% %25
= %3d
? %3F
# %23
& %26

因此編寫的代碼以下

def url_spilt(self):
        url = "http://y2.mt2t.com:91/ifr?url=%2bbvqT10xBsjrQlCXafOom96K2rGhgnQ1CJuc5clt8KDHnjH75Q6BhQ4Vnv7gUk%2bSpJYws4A93QjxcuTflk7RojJt0PiXpBkTAdXtRa6%2bLAY%3d&type=m3u8"
        url = url.split("?url=")[1].split("&")[0].replace("%2b","+").replace("%3d","=").replace("%2f","/")
        print(url)

接下來獲取type 這個比較容易 只須要判斷如下type=是否在字符串中而後截取便可。

url截取的代碼以下

def url_spilt(self,url):
        #url = "http://y2.mt2t.com:91/ifr?url=%2bbvqT10xBsjrQlCXafOom96K2rGhgnQ1CJuc5clt8KDHnjH75Q6BhQ4Vnv7gUk%2bSpJYws4A93QjxcuTflk7RojJt0PiXpBkTAdXtRa6%2bLAY%3d&type=m3u8"
        url_param = url.split("?url=")[1].split("&")[0].replace("%2b","+").replace("%3d","=").replace("%2f","/")
        if "type=" in url:
            type = url.split("type=")[1]
        else:
            type = ""
        return url_param,type

完善get_playlist函數,最終的代碼以下

def get_playlist(self):

        key = self.run()

        data = {
            "url":self.url,
            "key":key
        }
        html = requests.post(self.post_url,data=data).text
        dic = json.loads(html)

        for item in dic:
            url_param, type = self.url_spilt(item["Url"])
            res = requests.post(self.get_videourl,data={
                "url":url_param,
                "type":type,
                "from": "mt2t.com",
                "device":"",
                "up":"0"
            })
            play = json.loads(res.text)
            print(play)

運行以後獲得下面的提示,其中最重要的m3u8已經成果獲取到,完成任務 python3圖片爬蟲 python3圖片爬蟲

相關文章
相關標籤/搜索