亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用python爬蟲怎么爬取百度音樂

發布時間:2021-05-21 16:56:37 來源:億速云 閱讀:260 作者:Leah 欄目:開發技術

今天就跟大家聊聊有關使用python爬蟲怎么爬取百度音樂,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

如圖,筆者此次爬取的是百度音樂的頁面,所爬取的類容是上面榜單下的所有內容(歌曲名,歌手,排名)。如果按照上次的爬蟲的方法便要寫上三個select方法,分別抓取歌曲名,歌手,排名,但筆者觀察得知這三項數據皆放在一個li標簽內,如圖:

使用python爬蟲怎么爬取百度音樂

這樣我們是不是直接抓取ul標簽,再分析其中的數據便可得到全部數據了?答案是,當然可以。

但Beaufulsoup不能直接提供這樣的方法,但Python無所不能,python里面自帶的re模塊是我見過最迷人的模塊之一。它能在字符串中找到我們讓我們roi的區域,上述的li標簽中包含了我們需要的歌曲名,歌手,排名數據,我們只需要在li標簽中通過re.findall()方法,便可找到我們需要的數據。這樣就能夠大大提升我們爬蟲的效率。

我們先來直接分析代碼:

def parse_one_page(html): 
 soup = BeautifulSoup(html, 'lxml') 
 data = soup.select('div.ranklist-wrapper.clearfix div.bd ul.song-list li') 
 pattern1 = re.compile(r'<li.*?<div class="index">(.*?)</div>.*?title="(.*?)".*?title="(.*?)".*?</li>', re.S) 
 pattern2 = re.compile(r'<li.*?<div class="index">(.*?)</div>.*?title="(.*?)".*?target="_blank">(.*?)</a>', re.S) 
 
 wants = [] 
 for item in data: 
  # print(item) 
  final = re.findall(pattern1, str(item)) 
  if len(final) == 1: 
   # print(final[0]) 
   wants.append(final[0]) 
  else: 
   other = re.findall(pattern2, str(item)) 
   # print(other[0]) 
   wants.append(other[0]) 
 return wants

上面的代碼是我分析網頁數據的全部代碼,這里不得不說python語言的魅力,數十行代碼便能完成java100行的任務,C/C++1000行的任務。上述函數中,筆者首先通過Beautifulsoup得到該網頁的源代碼,再通過select()方法得到所有li標簽中的數據。

到這里,這個爬蟲便要進入到最重要的環節了,相信很多不懂re模塊的童靴們有點慌張,在這里筆者真的是強烈推薦對python有興趣的童靴們一定要學習這個非常重要的一環。首先,我們知道re的方法大多只針對string型數據,因此我們調用str()方法將每個list中的數據(即item)轉換為string型。然后便是定義re的pattern了,這是個稍顯復雜的東西,其中主要用到re.compile()函數得到要在string中配對的pattern,這里筆者便不累述了,感興趣的童靴可以去網上查閱一下資料。

上述代碼中,筆者寫了兩個pattern,因為百度音樂的網頁里,li標簽有兩個結構,當用一個pattern在li中找不到數據時,便使用另一個pattern。關于re.findadd()方法,它會返回一個list,里面裝著tuple,但其實我們知道我們找到的數據就是list[0],再將每個數據添加到另一個List中,讓函數返回。

相信很多看到這里的小伙伴已經云里霧里,無奈筆者對re板塊也知道的不多,對python感興趣的同學可以查閱相關資料再來看一下代碼,相信能夠如魚得水。

完整的代碼如下:

import requests 
from bs4 import BeautifulSoup 
import re 
 
 
def get_one_page(url): 
 wb_data = requests.get(url) 
 wb_data.encoding = wb_data.apparent_encoding 
 if wb_data.status_code == 200: 
  return wb_data.text 
 else: 
  return None 
 
 
def parse_one_page(html): 
 soup = BeautifulSoup(html, 'lxml') 
 data = soup.select('div.ranklist-wrapper.clearfix div.bd ul.song-list li') 
 pattern1 = re.compile(r'<li.*?<div class="index">(.*?)</div>.*?title="(.*?)".*?title="(.*?)".*?</li>', re.S) 
 pattern2 = re.compile(r'<li.*?<div class="index">(.*?)</div>.*?title="(.*?)".*?target="_blank">(.*?)</a>', re.S) 
 
 wants = [] 
 for item in data: 
  # print(item) 
  final = re.findall(pattern1, str(item)) 
  if len(final) == 1: 
   # print(final[0]) 
   wants.append(final[0]) 
  else: 
   other = re.findall(pattern2, str(item)) 
   # print(other[0]) 
   wants.append(other[0]) 
 return wants 
 
 
if __name__ == '__main__': 
 url = 'http://music.baidu.com/' 
 html = get_one_page(url) 
 data = parse_one_page(html) 
 for item in data: 
  dict = { 
   '序列': item[0], 
   '歌名': item[1], 
   '歌手': item[2] 
  } 
  print(dict)

最后我們看到的輸出結果如下:

使用python爬蟲怎么爬取百度音樂

python可以做什么

Python是一種編程語言,內置了許多有效的工具,Python幾乎無所不能,該語言通俗易懂、容易入門、功能強大,在許多領域中都有廣泛的應用,例如最熱門的大數據分析,人工智能,Web開發等。

看完上述內容,你們對使用python爬蟲怎么爬取百度音樂有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

囊谦县| 石林| 旬邑县| 东源县| 博乐市| 安平县| 瑞安市| 句容市| 龙游县| 博客| 贵州省| 高密市| 乐清市| 玉树县| 许昌市| 定兴县| 云浮市| 汽车| 电白县| 西吉县| 尤溪县| 太保市| 石台县| 荔浦县| 金平| 多伦县| 屏南县| 新野县| 甘肃省| 密云县| 高尔夫| 南京市| 通河县| 侯马市| 微山县| 濮阳县| 沂南县| 德化县| 临夏县| 十堰市| 扶余县|