① python爬蟲:想聽榜單歌曲只需要14行代碼即可搞定
雖然說XPath比正則表達式用起來方便,但是沒有最方便,只有更方便。我們的BeautifulSoup庫就能做到更方便的爬取想要的東西。
使用之前,還是老規矩,先安裝BeautifulSoup庫,指令如下:
其中文開發文檔:
BeautifulSoup庫是一個強大的Python語言的XML和HTML解析庫。它提供了一些簡單的函數來處理導航、搜索、修改分析樹等功能。
BeautifulSoup庫還能自動將輸入的文檔轉換為Unicode編碼,輸出文檔轉換為UTF-8編碼。
所以,在使用BeautifulSoup庫的過程中,不需要開發中考慮編碼的問題,除非你解析的文檔,本身就沒有指定編碼方式,這才需要開發中進行編碼處理。
下面,我們來詳細介紹BeautifulSoup庫的使用規則。
下面,我們來詳細介紹BeautifulSoup庫的重點知識。
首先,BeautifulSoup庫中一個重要的概念就是選擇解釋器。因為其底層依賴的全是這些解釋器,我們有必要認識一下。博主專門列出了一個表格:
從上面表格觀察,我們一般爬蟲使用lxml HTML解析器即可,不僅速度快,而且兼容性強大,只是需要安裝C語言庫這一個缺點(不能叫缺點,應該叫麻煩)。
要使用BeautifulSoup庫,需要和其他庫一樣進行導入,但你雖然安裝的是beautifulsoup4,但導入的名稱並不是beautifulsoup4,而是bs4。用法如下:
運行之後,輸出文本如下:
基礎的用法很簡單,這里不在贅述。從現在開始,我們來詳細學習BeautifulSoup庫的所有重要知識點,第一個就是節點選擇器。
所謂節點選擇器,就是直接通過節點的名稱選擇節點,然後再用string屬性就可以得到節點內的文本,這種方式獲取最快。
比如,基礎用法中,我們使用h1直接獲取了h1節點,然後通過h1.string即可得到它的文本。但這種用法有一個明顯的缺點,就是層次復雜不適合。
所以,我們在使用節點選擇器之前,需要將文檔縮小。比如一個文檔很多很大,但我們獲取的內容只在id為blog的p中,那麼我們先獲取這個p,再在p內部使用節點選擇器就非常合適了。
HTML示例代碼:
下面的一些示例,我們還是使用這個HTML代碼進行節點選擇器的講解。
這里,我們先來教會大家如何獲取節點的名稱屬性以及內容,示例如下:
運行之後,效果如下:
一般來說一個節點的子節點有可能很多,通過上面的方式獲取,只能得到第一個。如果要獲取一個標簽的所有子節點,這里有2種方式。先來看代碼:
運行之後,效果如下:
如上面代碼所示,我們有2種方式獲取所有子節點,一種是通過contents屬性,一種是通過children屬性,2者遍歷的結果都是一樣的。
既然能獲取直接子節點,那麼獲取所有子孫節點也是肯定可以的。BeautifulSoup庫給我們提供了descendants屬性獲取子孫節點,示例如下:
運行之後,效果如下:
同樣的,在實際的爬蟲程序中,我們有時候也需要通過逆向查找父節點,或者查找兄弟節點。
BeautifulSoup庫,給我們提供了parent屬性獲取父節點,同時提供了next_sibling屬性獲取當前節點的下一個兄弟節點,previous_sibling屬性獲取上一個兄弟節點。
示例代碼如下:
運行之後,效果如下:
對於節點選擇器,博主已經介紹了相對於文本內容較少的完全可以這么做。但實際的爬蟲爬的網址都是大量的數據,開始使用節點選擇器就不合適了。所以,我們要考慮通過方法選擇器進行先一步的處理。
find_all()方法主要用於根據節點的名稱、屬性、文本內容等選擇所有符合要求的節點。其完整的定義如下所示:
【實戰】還是測試上面的HTML,我們獲取name=a,attr={"class":"aaa"},並且文本等於text="Python板塊"板塊的節點。
示例代碼如下所示:
運行之後,效果如下所示:
find()與find_all()僅差一個all,但結果卻有2點不同:
1.find()只查找符合條件的第一個節點,而find_all()是查找符合條件的所有節點2.find()方法返回的是bs4.element.Tag對象,而find_all()返回的是bs4.element.ResultSet對象
下面,我們來查找上面HTML中的a標簽,看看返回結果有何不同,示例如下:
運行之後,效果如下:
首先,我們來了解一下CSS選擇器的規則:
1..classname:選取樣式名為classname的節點,也就是class屬性值是classname的節點2.#idname:選取id屬性為idname的節點3.nodename:選取節點名為nodename的節點
一般來說,在BeautifulSoup庫中,我們使用函數select()進行CSS選擇器的操作。示例如下:
這里,我們選擇class等於li1的節點。運行之後,效果如下:
因為,我們需要實現嵌套CSS選擇器的用法,但上面的HTML不合適。這里,我們略作修改,僅僅更改
② 如何通過python獲取qq音樂的歌曲
你需要安裝一個 MP3相關的模塊:eyed3
# -*- coding: utf-8 -*-
import eyed3
__author__ = 'lpe234'
def main():
mp3 = u'/Users/lpe234/Music/網易雲音樂/Lene Marlin - A Place Nearby.mp3'
xx = eyed3.load(mp3)
print(u'時長為:{}秒'.format(xx.info.time_secs))
if __name__ == '__main__':
main()
③ 如何用python做一個歌曲的dictionary,然後根據用戶選擇的藝術家顯示對應歌曲名
musics={
'Jackson':['MusicA','MusicB'],
'LadyGaga':['Umbrella','XXX']
}
上述代碼展示了一個dict,key是作者名字,value是一個存有歌名的list。
當用戶輸入作者後,就可以查表列印出該作者的歌名。
當然, list里可以不止是字元串表示的歌名,而是含有歌曲各種數據的dict或者object。
④ python協程爬取網易雲歌單
@[toc]
首先通過網易分頁歌單的url獲取每份歌單的url,然後通過每份歌單的url提取歌單中的前十首歌的url,通過每首歌的url獲取一些歌曲的作者和專輯等信息,整個過程通過協程來加快速度。
⑤ 如何不用音樂播放器批量下載音樂只需幾分鍾,Python輕松實現
我們想聽的歌,在特定音樂軟體才有,但是又嫌棄太麻煩,不想下載軟體,這個好說,Python隨隨便便就實現了!
我們以湫湫音樂為例,做一個搜索下載音樂的功能。
用到的軟體是anaconda5.2.0(python3.6.5)和pycharm,anaconda是自帶Python的,安裝了anaconda就不用安裝Python了。
然後需要安裝一個requests庫,鍵盤按住win+r,在彈出的搜索框輸入cmd ,按回車 ,在新彈出的命令提示符窗口輸入 pip install requests 即可完成安裝。
啰嗦了點,但是對零基礎友好一點。 知識點:
OK,開始嘗試吧 先安排一下要用的模塊,導入進來。
我們既然要爬一個網站,那麼如果有反扒的話,肯定要解決這個問題,像今天可以用 headers 模塊來模擬成瀏覽器訪問網站。
那麼 headers 在哪裡找呢? 在瀏覽器頁面上點擊:右鍵–>檢查–>(或者直接按F12),剩餘按照圖中顯示操作,需要按Fn+F5刷新出網頁來
然後我們既然是要搜索下載的話,那不得先把搜索功能做出來。
看看效果
獲取加密的vkey
如果你獲取的數據 是 {} .json() 他會直接幫我們轉換成字典。 然後實現下載 if 判斷是否有歌曲下載文件夾,如果沒有創建,就會自動創建一個歌曲下載文件夾。
當然這個名字都可以自己改。
現在我們看看效果
頁碼和數據條數可以不輸入,他會默認下載第一頁,一頁是十首歌。
你也可以下載其他頁
然後我只想要一首
這是剛剛自動獲取到的歌曲
當然,只用代碼多無趣,我們還可以實現把代碼打包,做成exe 程序,直接運行~ 具體怎麼做我就不一 一贅述了,方法簡單,網路一下分分鍾就做的出來。我給大家看下效果。
雖然只有一個命令框頁面,單好歹也是個不用安裝Python也能運行的exe文件了不,想要頁面好看,還得另外做個界面出來,下次整一個~
⑥ 如何使用Python爬取網易雲音樂歌單內的歌曲
1首先在瀏覽器在打開網易雲音樂的網頁版,並點進一個歌單。
2.在瀏覽器的開發者工具審查該頁面的元素(一般按f12可以彈出該工具),選擇Network,之後選擇doc可以簡便地找到我們需要的元素。
註:以下兩步第3,第4步主要是為了防止網站的反爬,經過這兩步後,基本可以避開網站的反爬,所以如果你爬取的網站沒有反爬的話,可以跳過這兩步。
3.查看網頁的請求方式--get請求
4.查看header
5.在Response中找到我們所需要的元素所在的標簽位置(如:我們要爬取的是歌曲,既需要尋找歌曲的名字與其id信息,觀察可以發現其中一首歌單中的歌名-moon在類名為「f-hide」的ul標簽的li標簽的a標簽中) ~
⑦ 使用 Python 讀寫文件
有些數據是臨時的,它們在應用程序運行時存儲在內存中,然後丟棄。但是有些數據是持久的。它們存儲在硬碟驅動器上供以後使用,而且它們通常是用戶最關心的東西。對於程序員來說,編寫代碼讀寫文件是很常見的,但每種語言處理該任務的方式都不同。本文演示了如何使用 Python 處理文件數據。
在 Linux 上,你可能已經安裝了 Python。如果沒有,你可以通過發行版軟體倉庫安裝它。例如,在 CentOS 或 RHEL 上:
在 macOS 上,你可以使用 MacPorts或Homebrew安裝。在 Windows 上,你可以使用Chocolatey安裝。
一旦安裝了 Python,打開你最喜歡的文本編輯器,准備好寫代碼吧。
如果你需要向一個文件中寫入數據,記住有三個步驟:
這與你在計算機上編碼、編輯照片或執行其他操作時使用的步驟完全相同。首先,打開要編輯的文檔,然後進行編輯,最後關閉文檔。
在 Python 中,過程是這樣的:
這個例子中,第一行以 寫 模式打開了一個文件,然後用變數 f 表示,我使用了 f 是因為它在 Python 代碼中很常見,使用其他任意有效變數名也能正常工作。
在打開文件時,有不同的模式:
第二行表示向文件中寫入數據,本例寫入的是純文本,但你可以寫入任意類型的數據。
最後一行關閉了文件。
對於快速的文件交互,常用有一種簡短的方法可以寫入數據。它不會使文件保持打開狀態,所以你不必記得調用 close 函數。相反,它使用 with 語法:
如果你或你的用戶需要通過應用程序需要向文件中寫入一些數據,然後你需要使用它們,那麼你就需要讀取文件了。與寫入類似,邏輯一樣:
同樣的,這個邏輯反映了你一開始使用計算機就已知的內容。閱讀文檔,你可以打開、閱讀,然後關閉。在計算機術語中,「打開」文件意味著將其載入到內存中。
實際上,一個文本文件內容肯定不止一行。例如,你需要讀取一個配置文件、 游戲 存檔或樂隊下一首歌曲的歌詞,正如你打開一本實體書時,你不可能立刻讀完整本書,代碼也只能解析已經載入到內存中的文件。因此,你可能需要遍歷文件的內容。
示例的第一行指明使用 讀 模式打開一個文件,然後文件交由變數 f 表示,但就像你寫數據一樣,變數名是任意的。 f 並沒有什麼特殊的,它只是單詞 「file」 的最簡表示,所以 Python 程序員會經常使用它。
在第二行,我們使用了 line ,另一個任意變數名,用來表示 f 的每一行。這告訴 Python 逐行迭代文件的內容,並將每一行的內容列印到輸出中(在本例中為終端或IDLE)。
就像寫入一樣,使用 with 語法是一種更簡短的方法讀取數據。即不需要調用 close 方法,方便地快速交互。
使用 Python 有很多方法向文件寫入數據,包括用 JSON、YAML、TOML等不同的格式寫入。還有一個非常好的內置方法用於創建和維護SQLite資料庫,以及許多庫來處理不同的文件格式,包括圖像、音頻和視頻等。
via: https://opensource.com/article/21/7/read-write-files-python
作者:Seth Kenlon選題:lujun9972譯者:MjSeven校對:turbokernel