Python爬蟲--喜馬拉雅三國音頻爬取

来源:https://www.cnblogs.com/chengxuyuanaa/archive/2019/12/15/12046109.html
-Advertisement-
Play Games

前言 本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。作者:Botreechan 1.進入地址我們可以發現,頁面有著非常整齊的目錄,那麼網頁源代碼中肯定也有非常規律的目錄,進去看看吧。如果你看不懂,建議先去小編的Python交流. ...


前言

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯繫我們以作處理。
作者:Botreechan 

1.進入地址我們可以發現,頁面有著非常整齊的目錄,那麼網頁源代碼中肯定也有非常規律的目錄,進去看看吧。如果你看不懂,建議先去小編的Python交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,裡面有最新Python教程項目可拿,不懂的問題多跟裡面的人交流,進步更快哦!

2.很明顯猜對了,源代碼中確實有這很明顯的規律,每一章節都有著及其固定的模板:

但是這時候我們並找不到深層的規律,那麼下一步我們嘗試下播放一條音頻,但不僅僅是播放,更重要的是要抓包!!!

3.打開瀏覽器抓包工具(F12),點擊任意一條音頻,這裡我就以第一條為例了。

上面兩張圖是我抓取到的getURL和返回的json,可以看出返回的內容里確實有三條音頻地址,複製到瀏覽器可以直接播放,聽一聽就是我們要的寶貝。重點來了,getURL中我圈出來的看著是不是很眼熟?不錯,那個就是網頁源代碼裡面每個章節URL里的一個值,而這個值就是每個章節的sound_id,再按照上面的步驟,操作其他章節看看,也是一樣的規律。那麼思路很清晰了,我們只需要把每個章節的ID的sound_id替換到getURL中不就可以獲取到每個章節的音頻了麽?

4.開始寫代碼:

  1.   import requests
  2.   import re
  3.    
  4.   #獲取網頁源代碼&解決反爬
  5.   header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
  6.   html = requests.get('http://www.ximalaya.com/4228109/album/268522/',headers=header)
  7.   print(html.text)
  8.   reg = '<a class="title" href="/4228109/sound/(.*?)/" hashlink title="(.*?)">'
  9.   name_url = re.findall(reg,html.text)
  10.   print(name_url)

這個時候我們可以看到,網頁每個章節和對應sound_id都被找出來了。

5.返回的有沒有很亂?確實很亂,但是返回的都是元組類型,那麼我們來定義一個ID和標題吧。

  1.   for sound_id,title in name_url:
  2.   print(sound_id,title)

看下效果,有沒有耳目一新:

6.好了,回到最開始我們抓包的時候,我們的音頻都在一個抓取的json里,開始拼接咱們的json URL

  1.   json_url = 'http://www.ximalaya.com/tracks/'+str(sound_id)+'.json'
  2.   print(title,json_url)

7.既然已經獲取到了每個URL,那麼現在去json裡面取最終的音頻URL吧

首先去請求下每個音頻的json URL,然後正在匹配出最終的URL吧,另外如果你剛學不久,建議如果你看不懂,建議先去小編的Python交流.裙 :一久武其而而流一思(數字的諧音)轉換下可以找到了,裡面有最新Python教程項目可拿,不懂的問題多跟裡面的人交流,進步更快哦!

  1.   #獲取每個音頻的json URL
  2.   json_url = 'http://www.ximalaya.com/tracks/'+str(sound_id)+'.json'
  3.   # print(json_url)
  4.    
  5.   result = requests.get(json_url,headers=header)
  6.   reg1 = '"play_path_64":"(.*?)"'
  7.    
  8.   #最終的音頻URL數列
  9.   sound_url = re.findall(reg1,result.text)
  10.   #列印音頻URL數列
  11.   print(title,sound_url)

8.好了,URL都拿到了,可以去下載了。。。

 

最後,貼上完整代碼:

  1.   import requests
  2.   import re
  3.   import time
  4.    
  5.   #獲取網頁源代碼&解決反爬
  6.   header = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}
  7.   html = requests.get('http://www.ximalaya.com/4228109/album/268522/',headers=header)
  8.   # print(html.text)
  9.   reg = '<a class="title" href="/4228109/sound/(.*?)/" hashlink title="(.*?)">'
  10.   name_url = re.findall(reg,html.text)
  11.   # print(name_url)
  12.   for sound_id,title in name_url:
  13.   # print(sound_id,title)
  14.    
  15.   #獲取每個音頻的json URL
  16.   json_url = 'http://www.ximalaya.com/tracks/'+str(sound_id)+'.json'
  17.   # print(json_url)
  18.    
  19.   #正則匹配出ID和音頻URL
  20.   result = requests.get(json_url,headers=header)
  21.   reg1 = '"play_path_64":"(.*?)"'
  22.    
  23.   #最終的音頻URL數列
  24.   sound_url = re.findall(reg1,result.text)
  25.   #列印音頻URL數列
  26.   # print(sound_url)
  27.   # print(title,sound_url[0])
  28.    
  29.   data = requests.get(sound_url[0])
  30.   with open(title+'.m4a','wb') as f:
  31.   f.write(data.content)
  32.   print('下載完成:',title)
  33.   time.sleep(1)

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 實現一個基於web技術的電影票訂票網站,故而系統主要以j2EE作為開發基礎,主要使用了struts2+spring+hibernate等多種框架的結合使用,用myeclipse作為開發工具,以MYSQL作為資料庫,以Macromedia公司的Dreamweaver作為界面美化工具,使用JAVA語言開 ...
  • 寫在前面 在我初次接觸MongoDB的時候,是為了做一個監控系統和日誌分析系統。當時在用Java操作MongoDB數據里的數據的時候,都是在網上查找Demo示例然後完成的功能,相信大家也同樣的體會,網上大都是這種一個入門的小Demo,很少有深入講解的。功能調通後,自己琢磨效率方面的問題,便開始自己的 ...
  • 大家都知道,Java中JVM的重要性,學習了JVM你對Java的運行機制、編譯過程和如何對Java程式進行調優相信都會有一個很好的認知。 廢話不多說,直接帶大家來初步認識一下JVM。 什麼是JVM? JVM(Java Virtual Machine)是一個抽象的電腦,和實際的電腦一樣,它具有指令 ...
  • 猜數字小游戲 1 # coding:utf-8 2 import random 3 4 5 #利用random生成一個1-10的隨機數 6 luckeyNum = random.randint(1,10) 7 8 #限定猜的次數 9 limitCount = 3 10 11 while limitC ...
  • 新聞 "Azure Functions 3.0系統上線" "GC性能架構——第1部分" "ConfigureAwait問題解答" "介紹System.Threading.Channels" "Windows Server Core容器鏡像小了40%" "F 性能提示和技巧" 視頻及幻燈片 "語言與運 ...
  • 線程池一大早就來到了公司,進到了屬於自己的“經理”辦公室,時間才剛剛8點,雖然他不用打卡。不覺中時間來到了8:40,公司的“中層管理”人員們陸續到來,打卡後坐到各自工位,稍作調整,準備參加公司的“晨會”。趁還有點時間,就給大家介紹下出席晨會的人員吧。線程池就是Java里的大名鼎鼎的ThreadPoo ...
  • "先鏈接到一個我的另一篇有關HTTP的博客" 第一次訪問時會有些慢~~~ http協議 因為編寫 Web 應用必須對 HTTP 有所瞭解,所以我們對 HTTP 進行介紹 HTTP 協議簡介 HTTP 超文本傳輸協議 (HTTP Hypertext transfer protocol),是一個屬於應用 ...
  • 1.Unable to save settings: Failed to save settings. Please restart PyCharm解決 將工程的.idea目錄刪掉,重啟pycharm即可。 2.error:please select a valid Python interpret ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...