python爬蟲爬取網頁表格數據,python 錄制網易云登陸_Python爬蟲教程,爬取網易云的音樂

 2023-12-10 阅读 35 评论 0

摘要:在開始之前,做一點小小的說明哈:我只是一個python爬蟲愛好者,如果本文有侵權,請聯系我刪除!本文需要有簡單的python爬蟲基礎,主要用到兩個爬蟲模塊(都是常規的)requests模塊selenium模塊建議使用谷歌瀏覽器,方便進行抓包和數

在開始之前,做一點小小的說明哈:

  • 我只是一個python爬蟲愛好者,如果本文有侵權,請聯系我刪除!
  • 本文需要有簡單的python爬蟲基礎,主要用到兩個爬蟲模塊(都是常規的)requests模塊selenium模塊
  • 建議使用谷歌瀏覽器,方便進行抓包和數據獲取。私信小編01即可獲取大量Python學習資料

Part1 進行網頁分析

首先打開網易云的網頁版網易云
然后搜索歌曲,這里我就搜索一首錦零的“空山新雨后”

868deda0fbd9faaa656d0de99c526987.png


這時我們來觀察網頁的url,可以發現s=后面就是我們搜索的關鍵字

3c7995aa8c0c67b7989ab4accbbac5b8.png


當我們換一首歌,會發現也是這樣的,正好驗證了我們的想法

5d690e82a86fcae3518f754d4433edfb.png


所以下一步讓我們點進去一首歌,然后進行播放,看看能否直接獲取音樂文件的url,如果能,那么直接對url進行requests.get訪問,我們就能拿到.mp3文件了
點進第一首“空山新雨后”,我們可以看到有一個“生成外鏈播放器”

dff06fae1d82bd1176a320a2b740914d.png


看到這個,我心中一陣激動,仿佛就要大功告成;于是我滿懷開心的點了一下,結果。。。

7ad7ea613e938a3da08ef07726744d69.png


好吧,不過我們不能放棄,來我們分析一下網頁
但當我們定位到兩個最有可能出現外鏈的地方時,發現什么都沒有

c0ee59992ce6e5656362290860fd874d.png
d244a84dd19d5b8af4ea84f826bed287.png


不過作為“規格嚴格,功夫到家”的傳承者,我不能放棄啊,于是我又打開了抓包工具
按照常規套路,我們定位到XHR

19e52665653abedc33895220cbb42d2c.png


點擊播放后,出現了一大堆東西,我們要做的就是找到其中的content-type為audio一類的包
功夫不負有心人,在尋找了一(億)會兒后,我找到了

12eb6465399de98c279d0a93e21e7f99.png
78a964c3b8d6fe10dd087531fef1815f.png


于是我又滿懷開心的復制了這個包對應的Request-URL
粘貼后訪問這個url,結果非常滿意,這就是我一直在找的url

1ce0db62149e70ff0c9d2a499749a987.png


現在我把那個url貼出來

https://m10.music.126.net/20200715163315/a075d787d191f6729a517527d6064f59/ymusic/0552/0f0e/530f/28d03e94478dcc3e0479de4b61d224e9.mp3

Part2 編寫爬蟲程序

接下來就超級簡單了
下面的代碼是最常規的操作,應該有爬蟲基礎的都能看懂;如果有不懂的,注釋都在上面

#導入requests包import requests  #進行UA偽裝headers = {    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36'}#指定urlurl = 'https://m10.music.126.net/20200715163315/a075d787d191f6729a517527d6064f59/ymusic/0552/0f0e/530f/28d03e94478dcc3e0479de4b61d224e9.mp3'#調用requests.get方法對url進行訪問,和持久化存儲數據audio_content = requests.get(url=url,headers=headers).content#存入本地with open('空山新雨后.mp3','wb') as f :    f.write(audio_content)print("空山新雨后爬取成功!!!")

Part3 更高級的

看到這里,你可能會想,為啥根本沒用selenium模塊呢?能不能直接爬取任何一首我想要的歌,而不用每首都去費心費力的找一個url呢?當然可以噠!
其實網易云在線播放每首歌曲時,都有一個外鏈地址,這是不會變的,跟每首歌的唯一一個id綁定在一起,每首歌audio文件的url如下:

url = 'http://music.163.com/song/media/outer/url?id=' + 歌曲的id值 + '.mp3'

id值的獲取也很簡單,當我們點進每首歌時,上方會出現對應的網址,那里有id值,如下圖:

20b8262c0b9ff80613d153db50c8bc24.png


所以只需把上面程序中的url改成新的url即可
如果還想要更好的體驗效果,實現在程序里直接搜索歌曲,拿到id值,就需要用到selenium模塊
為什么用selenium而不用xpath或bs4?
因為搜索頁面的數據是動態加載出來的,如果直接對搜索頁面的網頁進行數據解析,就拿不到任何數據;以我目前的技術,就只能想到使用萬能的selenium模塊,下面大概說明一下步驟:

  1. 進行selenium無可視化界面設置
from selenium.webdriver.chrome.options import Optionschrome_options = Options()chrome_options.add_argument('--headless')chrome_options.add_argument('--disable-gpu')
  1. 導包
import requestsimport refrom selenium import webdriverfrom time import sleep
  1. 指定歌曲,得到對應搜索頁面的url
name = input('請輸入歌名:')url_1 = 'https://music.163.com/#/search/m/?s=' + name + '&type=1'
  1. 獲取搜索頁面的html文件
#初始化browser對象browser = webdriver.Chrome(executable_path='chromedriver.exe',chrome_options=chrome_options)#訪問該urlbrowser.get(url=url_1)#由于網頁中有iframe框架,進行切換browser.switch_to.frame('g_iframe')#等待0.5秒sleep(0.5)#抓取到頁面信息page_text = browser.execute_script("return document.documentElement.outerHTML")#退出瀏覽器browser.quit()
  1. 用正則模塊re匹配html文件中的id值、歌名和歌手
ex1 = ''ex3 = 'class="td w1">(.*?)
'id_list = re.findall(ex1,page_text,re.M)[::2]song_list = re.findall(ex2,page_text,re.M)singer_list = re.findall(ex3,page_text,re.M)

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/2/194369.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息