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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...