日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

及Python爬蟲探討

系統(tǒng) 1945 0

這是作者的系列網(wǎng)絡(luò)安全自學(xué)教程,主要是關(guān)于網(wǎng)安工具和實(shí)踐操作的在線筆記,特分享出來與博友共勉,希望您們喜歡,一起進(jìn)步。上一篇文章分享了OllyDbg動態(tài)分析工具的基礎(chǔ)用法,并簡單講解兩個Crakeme逆向工程破解實(shí)戰(zhàn)方法;本篇文章將介紹Chrome瀏覽器的Network功能,并解析下載快手視頻,同時分享了一個Python解析Network鏈接的難題。希望對初學(xué)者有幫助,大神請飄過,謝謝各位看官!

下載地址:https://github.com/eastmountyxz/NetworkSecuritySelf-study

PS:作為初學(xué)者,深知網(wǎng)絡(luò)安全這塊要學(xué)習(xí)的知識太多,希望自己能始終保持滿腔熱情,科研結(jié)合實(shí)踐慢慢前行。

文章目錄

  • 一.快手視頻網(wǎng)站解析
  • 二.Chrome瀏覽器Network分析
  • 三.Python下載視頻
  • 四.Python自動化抓取視頻討論
  • 五.總結(jié)

前文學(xué)習(xí):
[網(wǎng)絡(luò)安全自學(xué)篇] 一.入門筆記之看雪Web安全學(xué)習(xí)及異或解密示例
[網(wǎng)絡(luò)安全自學(xué)篇] 二.Chrome瀏覽器保留密碼功能滲透解析及登錄加密入門筆記
[網(wǎng)絡(luò)安全自學(xué)篇] 三.Burp Suite工具安裝配置、Proxy基礎(chǔ)用法及暴庫示例
[網(wǎng)絡(luò)安全自學(xué)篇] 四.實(shí)驗(yàn)吧CTF實(shí)戰(zhàn)之WEB滲透和隱寫術(shù)解密
[網(wǎng)絡(luò)安全自學(xué)篇] 五.IDA Pro反匯編工具初識及逆向工程解密實(shí)戰(zhàn)
[網(wǎng)絡(luò)安全自學(xué)篇] 六.OllyDbg動態(tài)分析工具基礎(chǔ)用法及Crakeme逆向破解

前文欣賞:
[滲透&攻防] 一.從數(shù)據(jù)庫原理學(xué)習(xí)網(wǎng)絡(luò)攻防及防止SQL注入
[滲透&攻防] 二.SQL MAP工具從零解讀數(shù)據(jù)庫及基礎(chǔ)用法
[滲透&攻防] 三.數(shù)據(jù)庫之差異備份及Caidao利器
[滲透&攻防] 四.詳解MySQL數(shù)據(jù)庫攻防及Fiddler神器分析數(shù)據(jù)包


一.快手視頻網(wǎng)站解析

雖然作者不玩快手和抖音,但作為網(wǎng)安方向的新人,總想把這些視頻下載到本地。本篇文章主要利用Chrome瀏覽器和Python簡單分析快手視頻如何下載到本地。

第一步: 將需要下載的視頻分享到QQ,將得到如下鏈接,通過瀏覽器打開如下圖所示。
首頁推薦的某主播視頻:http://zhaotong.m.chenzhongtech.com/s/yQ0cCf77

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第1張圖片

第二步: 它會重定向跳轉(zhuǎn)到一個新的網(wǎng)址,該網(wǎng)址才是我們需要分析的目標(biāo)頁面,比如下面的三個視頻鏈接。

我們可以猜測出網(wǎng)址基本的構(gòu)成為:

https://live.kuaishou.com/u + 用戶ID + 視頻ID + ?did= + 一串密鑰

https://live.kuaishou.com/u/3xhese5im6yksx6/3xa7v5aze84kirg?did=web_3e7228e2fb25419eae1bc7a0eb29bbde
https://live.kuaishou.com/u/3xhese5im6yksx6/3xg6v9usfdnkuf9?did=web_3e7228e2fb25419eae1bc7a0eb29bbde
https://live.kuaishou.com/u/3xhese5im6yksx6/3xvgazhxasseuye?did=web_3e7228e2fb25419eae1bc7a0eb29bbde

注意,如果我們省略后面的did值,它會自動補(bǔ)充該值并正確訪問的,如:
https://live.kuaishou.com/u/3xhese5im6yksx6/3xa7v5aze84kirg

第三步: 下面是視頻hot頁面,通過Chrome瀏覽器打開,并按下F12(或右鍵“檢查”)可以查看源代碼。在Network頁面下,點(diǎn)擊XHR,再刷新一次頁面,點(diǎn)擊“graphql”可以看到Json數(shù)據(jù),這次終于確定我們之前的猜想,鏈接有“主播ID”(id)和“視頻ID”(photoId)組成。

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第2張圖片

其中某個視頻信息如下:

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第3張圖片

第四步: 我們嘗試拼接下鏈接,確實(shí)能夠正確訪問,如下圖所示。接著我們將簡單分析如何下載視頻至本地。
id: 3xwuykzsrqyynv6
photoId: 3x69gvye5gjh7se
https://live.kuaishou.com/u/3xwuykzsrqyynv6/3x69gvye5gjh7se


二.Chrome瀏覽器Network分析

第一步: 還是以這個視頻為例,我們按下F12鍵(或右鍵“檢查”),刷新頁面,點(diǎn)擊Network。

首頁推薦的某主播視頻:https://live.kuaishou.com/u/3xhese5im6yksx6/3xa7v5aze84kirg

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第4張圖片

第二步: 在“ALL”中找到有一個“mp4”結(jié)尾的文件,即為要下載的視頻文件,點(diǎn)擊“Headers”查看對應(yīng)視頻地址。注意,視頻執(zhí)行過程中,盡量點(diǎn)擊下暫停,否則會跳轉(zhuǎn)到下一個視頻。

Request URL: https://jsmov2.a.yximgs.com/bs2/newWatermark/NjUzODIwODM5OA_zh_4.mp4
Request Method: GET
Status Code: 206 Partial Content
Remote Address: 61.240.28.1:443
Referrer Policy: unsafe-url

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第5張圖片

第三步: 打開迅雷,將復(fù)制的視頻網(wǎng)址添加到“新建下載任務(wù)”中,下載該視頻。

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第6張圖片

第四步: 視頻成功下載至本地,打開即可。

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第7張圖片

你可能會想:
能不能直接分析HTML源代碼,從中定位視頻的鏈接。不行了,視頻是動態(tài)加載的,我能想到的方法是通過Python獲取Network中的所有資源,再定位“mp4”對應(yīng)的超鏈接,但最終還是沒解決,后續(xù)部分將詳細(xì)探討。

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第8張圖片

三.Python下載視頻

Tqdm是Python進(jìn)度條庫,可以在Python長循環(huán)中添加一個進(jìn)度提示信息用法:tqdm(iterator)。

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第9張圖片

示例代碼:

            
              
                # -*- coding: utf-8 -*-
              
              
                import
              
               time

              
                from
              
               tqdm 
              
                import
              
               tqdm  


              
                for
              
               i 
              
                in
              
               tqdm
              
                (
              
              
                range
              
              
                (
              
              
                100
              
              
                )
              
              
                )
              
              
                :
              
                
    time
              
                .
              
              sleep
              
                (
              
              
                0.01
              
              
                )
              
              
                #設(shè)置描述
              
              
pbar 
              
                =
              
               tqdm
              
                (
              
              
                [
              
              
                "a"
              
              
                ,
              
              
                "b"
              
              
                ,
              
              
                "c"
              
              
                ,
              
              
                "d"
              
              
                ]
              
              
                )
              
              
                for
              
               char 
              
                in
              
               pbar
              
                :
              
              
                # 設(shè)置描述
              
              
    pbar
              
                .
              
              set_description
              
                (
              
              
                "Processing %s"
              
              
                %
              
               char
              
                )
              
              
    time
              
                .
              
              sleep
              
                (
              
              
                1
              
              
                )
              
            
          

輸出結(jié)果如下圖所示:

            
              
                0
              
              
                %
              
              
                |
              
              
                |
              
              
                0
              
              
                /
              
              
                4
              
              
                [
              
              
                00
              
              
                :
              
              
                00
              
              
                <
              
              ?
              
                ,
              
               ?it
              
                /
              
              s
              
                ]
              
              
Processing a
              
                :
              
              
                25
              
              
                %
              
              
                |
              
              ██▌       
              
                |
              
              
                1
              
              
                /
              
              
                4
              
              
                [
              
              
                00
              
              
                :
              
              
                01
              
              
                <
              
              
                00
              
              
                :
              
              
                03
              
              
                ,
              
              
                1.
              
              00it
              
                /
              
              s
              
                ]
              
              
Processing b
              
                :
              
              
                50
              
              
                %
              
              
                |
              
              █████     
              
                |
              
              
                2
              
              
                /
              
              
                4
              
              
                [
              
              
                00
              
              
                :
              
              
                02
              
              
                <
              
              
                00
              
              
                :
              
              
                02
              
              
                ,
              
              
                1.
              
              00it
              
                /
              
              s
              
                ]
              
              
Processing c
              
                :
              
              
                75
              
              
                %
              
              
                |
              
              ███████▌  
              
                |
              
              
                3
              
              
                /
              
              
                4
              
              
                [
              
              
                00
              
              
                :
              
              
                03
              
              
                <
              
              
                00
              
              
                :
              
              
                01
              
              
                ,
              
              
                1.
              
              00it
              
                /
              
              s
              
                ]
              
              
Processing d
              
                :
              
              
                100
              
              
                %
              
              
                |
              
              ██████████
              
                |
              
              
                4
              
              
                /
              
              
                4
              
              
                [
              
              
                00
              
              
                :
              
              
                04
              
              
                <
              
              
                00
              
              
                :
              
              
                00
              
              
                ,
              
              
                1.
              
              00it
              
                /
              
              s
              
                ]
              
            
          

下面講述一段代碼,將視頻下載至本地。

            
              
                # coding=utf-8
              
              
                import
              
               json

              
                import
              
               requests

              
                import
              
               tqdm


              
                #定義函數(shù)下載視頻
              
              
                def
              
              
                saveMp4
              
              
                (
              
              url
              
                ,
              
               filename
              
                )
              
              
                :
              
              
    res 
              
                =
              
               requests
              
                .
              
              get
              
                (
              
              url
              
                ,
              
               stream
              
                =
              
              
                True
              
              
                )
              
              
    file_size 
              
                =
              
              
                int
              
              
                (
              
              res
              
                .
              
              headers
              
                [
              
              
                'Content-Length'
              
              
                ]
              
              
                )
              
              
    num 
              
                =
              
              
                1
              
              
    num_size 
              
                =
              
              
                1024
              
              
    num_bars 
              
                =
              
              
                int
              
              
                (
              
              file_size 
              
                /
              
               num_size
              
                )
              
              
                with
              
              
                open
              
              
                (
              
              filename
              
                ,
              
              
                'wb'
              
              
                )
              
              
                as
              
               fp
              
                :
              
              
                for
              
               num 
              
                in
              
               tqdm
              
                .
              
              tqdm
              
                (
              
              
            res
              
                .
              
              iter_content
              
                (
              
              chunk_size 
              
                =
              
               num_size
              
                )
              
              
                ,
              
              
            total 
              
                =
              
               num_bars
              
                ,
              
              
            unit 
              
                =
              
              
                'KB'
              
              
                ,
              
              
            desc 
              
                =
              
               filename
              
                ,
              
              
            leave 
              
                =
              
              
                True
              
              
                )
              
              
                :
              
              
            fp
              
                .
              
              write
              
                (
              
              num
              
                )
              
              
                #調(diào)用函數(shù)
              
              
url 
              
                =
              
              
                "https://jsmov2.a.yximgs.com/bs2/newWatermark/MTQ5Mzk2MzMwMDg_zh_4.mp4"
              
              
filename 
              
                =
              
              
                "test.mp4"
              
              
saveMp4
              
                (
              
              url
              
                ,
              
               filename
              
                )
              
            
          

如下圖所示:

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第10張圖片

如果讀者想下載快手某位主播的所有視頻,則可以點(diǎn)擊它的個人主頁,如下圖所示。

主播的主頁:https://live.kuaishou.com/profile/Flulu727

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第11張圖片

寫到這里,你可能會想能不能寫個爬蟲將所有網(wǎng)頁鏈接中“mp4”對應(yīng)的地址抓取下來,再進(jìn)行統(tǒng)一爬取。下面我們來簡單進(jìn)行分析,但最終結(jié)果失敗了!


四.Python自動化抓取視頻討論

網(wǎng)絡(luò)查找很多獲取Network中所有網(wǎng)絡(luò)請求URL、獲取XHR的response結(jié)果,均沒有一個有效的答案,包括github的代碼。比如:

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第12張圖片

下面進(jìn)行一些探討,我首先想到的方法包括兩個基本操作,即:
1.設(shè)置消息頭headers和請求的參數(shù)data,調(diào)用requests()函數(shù)請求連接,注意該視頻是GET方法。

            
              Request URL: https://txmov2.a.yximgs.com/bs2/newWatermark/NjUzODIwODM5OA_zh_4.mp4
Request Method: GET
Status Code: 206 Partial Content
Remote Address: 116.207.112.100:443
Referrer Policy: unsafe-url

            
          

2.返回的數(shù)據(jù)調(diào)用json.load()函數(shù)進(jìn)行解析,并且獲取指定的字段。

            
              
                # -*- coding: utf-8 -*-
              
              
                import
              
               json

data 
              
                =
              
              
                {
              
              
                'id'
              
              
                :
              
              
                1
              
              
                ,
              
              
                'name'
              
              
                :
              
              
                'test1'
              
              
                ,
              
              
                'age'
              
              
                :
              
              
                '1'
              
              
                }
              
              
data2 
              
                =
              
              
                [
              
              
                {
              
              
                'id'
              
              
                :
              
              
                1
              
              
                ,
              
              
                'name'
              
              
                :
              
              
                'test1'
              
              
                ,
              
              
                'age'
              
              
                :
              
              
                '1'
              
              
                }
              
              
                ,
              
              
                {
              
              
                'id'
              
              
                :
              
              
                2
              
              
                ,
              
              
                'name'
              
              
                :
              
              
                'test2'
              
              
                ,
              
              
                'age'
              
              
                :
              
              
                '2'
              
              
                }
              
              
                ]
              
              
                #python字典類型轉(zhuǎn)換為json對象
              
              
json_str 
              
                =
              
               json
              
                .
              
              dumps
              
                (
              
              data
              
                )
              
              
                print
              
              
                (
              
              u
              
                "python原始數(shù)據(jù):"
              
              
                )
              
              
                print
              
              
                (
              
              
                repr
              
              
                (
              
              data
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "json對象:"
              
              
                )
              
              
                print
              
              
                (
              
              json_str
              
                )
              
              
                print
              
              
                (
              
              
                ""
              
              
                )
              
              
 
json_str2 
              
                =
              
               json
              
                .
              
              dumps
              
                (
              
              data2
              
                )
              
              
                print
              
              
                (
              
              u
              
                "python原始數(shù)據(jù):"
              
              
                )
              
              
                print
              
              
                (
              
              
                repr
              
              
                (
              
              data2
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              u
              
                "json對象:"
              
              
                )
              
              
                print
              
              
                (
              
              json_str2
              
                )
              
              
                print
              
              
                (
              
              
                ""
              
              
                )
              
              
                # 將json對象轉(zhuǎn)換為python字典
              
              
data3 
              
                =
              
               json
              
                .
              
              loads
              
                (
              
              json_str
              
                )
              
              
                print
              
              
                (
              
              data3
              
                )
              
              
                print
              
              
                (
              
              
                "data3['name']: "
              
              
                ,
              
               data3
              
                [
              
              
                'name'
              
              
                ]
              
              
                )
              
              
                print
              
              
                (
              
              
                "data3['age']: "
              
              
                ,
              
               data3
              
                [
              
              
                'age'
              
              
                ]
              
              
                )
              
            
          

輸出結(jié)果如下圖所示:

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第13張圖片

下面開始簡單的嘗試:

第一步:調(diào)用requests獲取數(shù)據(jù)

            
              
                # coding=utf-8
              
              
                import
              
               json

              
                import
              
               requests

              
                from
              
               pyquery 
              
                import
              
               PyQuery 
              
                as
              
               pq


              
                #設(shè)置請求
              
              
ID 
              
                =
              
              
                "3xrptqgjk98rism"
              
              
photoID 
              
                =
              
              
                "3xw28sc864d8p2e"
              
              
URL 
              
                =
              
              
                'https://live.kuaishou.com/u/'
              
              
                +
              
              ID
              
                +
              
              
                '/'
              
              
                +
              
              photoID

              
                print
              
               URL

headers 
              
                =
              
              
                {
              
              
                'user-agent'
              
              
                :
              
              
                'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'
              
              
                }
              
              
                #獲取某個ID用戶的作品photoID
              
              
res 
              
                =
              
               requests
              
                .
              
              get
              
                (
              
              URL
              
                ,
              
               headers
              
                =
              
              headers
              
                )
              
              
                print
              
              
                len
              
              
                (
              
              res
              
                .
              
              text
              
                )
              
              
                #PyQuery解析
              
              
html 
              
                =
              
               pq
              
                (
              
              res
              
                .
              
              text
              
                )
              
              
                print
              
               html

            
          

輸出結(jié)果中最重要的是最后一個script代碼。

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第14張圖片

這里包含了視頻URL代碼。

[網(wǎng)絡(luò)安全自學(xué)篇] 七.快手視頻下載之Chrome瀏覽器Network分析及Python爬蟲探討_第15張圖片

第二步:嘗試用下面的代碼解析Json數(shù)據(jù)并定位鏈接。

            
              key 
              
                =
              
              
                '$ROOT_QUERY.publicFeeds({"count":24,"pcursor":"","principalId":"%s"})'
              
              
                %
              
               ID

              
                print
              
               key

data 
              
                =
              
               json
              
                .
              
              loads
              
                (
              
              html
              
                )
              
              
                print
              
               data


              
                #獲取連接及命名
              
              
play 
              
                =
              
               data
              
                [
              
              
                'data'
              
              
                ]
              
              
                [
              
              key
              
                ]
              
              
url 
              
                =
              
               play
              
                [
              
              
                'playUrl'
              
              
                ]
              
              
vedio 
              
                =
              
               play
              
                [
              
              
                'caption'
              
              
                ]
              
              
                +
              
              
                '.mp4'
              
            
          

但最重要的一步是如何定位Json位置并解析。


五.總結(jié)

推薦讀者閱讀大神的文章,后續(xù)將學(xué)習(xí)Fiddler進(jìn)行手機(jī)抓包以及代理設(shè)置。
(強(qiáng)推)用Python寫了個下載快手視頻的小腳本 - DIY
(強(qiáng)推)python爬蟲從入門到放棄(九)之 實(shí)例爬取上海高級人民法院網(wǎng)開庭公告數(shù)據(jù) -zhaof - 動態(tài)爬蟲
python爬取快手視頻–json數(shù)據(jù)分析 - Dream____Fly
python爬取快手視頻 多線程下載 - foddler配置
Python 下載網(wǎng)絡(luò)mp4視頻資源 - dcb3688 - PyQuery獲取Json參數(shù)
Python爬蟲技巧-西瓜視頻MP4地址獲取 - 我愛學(xué)python - base64decode解密
[python] Python2.7爬蟲+Fiddler 爬取快手APP的短視頻 - 哈士奇的布偶 - APP代理
Chrome + Python 抓取動態(tài)網(wǎng)頁內(nèi)容 - 吹劍錄
淺談如何使用python抓取網(wǎng)頁中的動態(tài)數(shù)據(jù) - saintlabs

Github:
https://github.com/binglansky/spider/blob/master/kuaishou.py
https://github.com/muyangren907/Kwai_download_script
https://github.com/d1y/lovepack/blob/master/kuaishou.py

珞珞如石,溫而若珈;瀟灑坦蕩,一生澄澈。新學(xué)期,新生活,新里程。
一個多月的閉關(guān),深深體會到數(shù)學(xué)和英語的重要性,短板抓緊補(bǔ)起來,長板卻沒有。開學(xué)八門課,《信息論》《現(xiàn)代密碼學(xué)》《網(wǎng)絡(luò)安全協(xié)議》《信息安全前沿》《信息安全與可信計(jì)算》《自然語言處理》等,就NLP熟悉點(diǎn),得加油了,更要靜下心來去“做”、“學(xué)”、“問”。Stay hungry,Stay foolish~希望與您一起進(jìn)步

(By:Eastmount 2019-09-05 下午1點(diǎn) http://blog.csdn.net/eastmount/ )


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 安康市| 横山县| 开平市| 通州区| 台中县| 潜山县| 理塘县| 天柱县| 凉山| 定西市| 根河市| 和林格尔县| 红河县| 韩城市| 武鸣县| 宣城市| 民和| 四会市| 老河口市| 平度市| 景泰县| 成都市| 上犹县| 旺苍县| 乌兰浩特市| 永年县| 赤水市| 内丘县| 抚顺市| 依安县| 唐河县| 元谋县| 甘孜| 榆林市| 海淀区| 门源| 南郑县| 上思县| 凤凰县| 鹤壁市| 高邮市|