QQ音樂搜尋功能基本思路

Hohaod發表於2019-03-24

初步大致思路:個人認為下載器中需要用到爬蟲爬取資料的部分是 “搜尋” 和 “下載” 這兩個環節

一.讓我們先來說說“搜尋”環節

第一步:開啟QQ音樂網頁版,在搜尋框中隨性搜尋一波,得到一個搜尋列表

第二步:F12 F5 開啟開發者工具

發現了一大坨各式各樣的檔案 個人認為要實現搜尋功能必須先找到搜尋列表中包含9首歌詳細資訊的檔案所對應的URL

然後就慢慢找啊找啊找啊 然後發現

有個list中儲存了每首歌的以下基本資訊!!!

對應的是這一個檔案 然後我們到headers部分找到他的URL

c.y.qq.com/soso/fcgi-b…

又臭又長的URL(一言難盡...)

但其實,我們可以稍微用點小技巧解析一下這串URL

小技巧1:把引數n的值改變一下(n=10意味著只會返回10首歌的資訊)我們把n賦一個很大的值 這樣 我們可以得到儘可能多的歌曲資訊 是我們的搜尋功能更加好

小技巧2:精簡URL一個引數一個引數的刪除,沒有的引數刪除後,經測試,開啟的內容是不變的

小技巧3:URL其實是使用了 & 隔開每個引數 所以我們以 & 為界隔開各個引數就可以讓URL更加易讀易懂

到目前為止,我們算是找到了一個搜尋列表的URL,但是如果要達到“搜尋功能”,就肯定會獲取無數個搜尋列表,

他們的URL一個個去找明顯不可取

所以此時我聯想(腦洞而已)到:我們是否可以找到URL中的 變數 與 不變數 然後不變數用一種匹配模式去匹配

於是乎我們就得到:由 不變數 和 關於變數的匹配模式組成的一個 “通用的URL”

當我們輸入關鍵詞時,通過與這個“通用的URL”匹配便可得到對應的搜尋列表

下面我將通過搜尋不同的關鍵詞 去尋找URL中的 不變數 與 變數(此處省略步驟的展示)

比較之後,我發現了不同的引數是: w

w=%E8%96%9B%E4%B9%8B%E8%B0%A6&g_tk=1315617814(“薛之謙”)

w=%E5%91%A8%E6%9D%B0%E4%BC%A6&g_tk=1321333438(“周杰倫”)

這裡我是通過正規表示式去匹配的

匹配後就是常規的 讀取URL---》得到返回體--》解析返回體中的資料

分析資料的時候涉及了一個:json格式轉換為列表格式的操作

最後 我們通過迴圈輸出列表中我們所需的資訊(歌曲名 歌手名 專輯名 歌曲時長。。。(想要啥要啥))

寫在最後:搜尋功能的程式碼已經實現 下載功能的思路其實可以說是和搜尋功能的一模一樣 注意細節很快就能實現了

相關文章