1. 程式人生 > >Python3.7 爬蟲(三)使用 Urllib2 與 BeautifulSoup4 爬取網易雲音樂歌單

Python3.7 爬蟲(三)使用 Urllib2 與 BeautifulSoup4 爬取網易雲音樂歌單

廢話

在前面的的部落格中我們已經能夠使用 python3 配合自帶的庫或者第三方庫抓取以及解析網頁,我們今天來試試抓取網易雲音樂的歌單資訊

分析網頁

image

我們現在來分析網頁
點選右側介面中的 Network 進入網路請求分析介面,如下:

iamge

上圖中我們可以看到請求還分了型別的,這裡我們檢視型別為 document 的條目,看著 playlist 條目比較像是包含歌單的檔案,於是我們點選 playlist 條目:

image

點選 preview, 如上圖,我們左邊的歌單在右邊找到了,看來就是這個請求獲取到了歌單。
然後我們點選 Headers 介面,來到請求頭資訊介面:

image

抓取 html

網頁內容獲取,按照三部曲來做
- 直接通過網址訪問,看能否取到需要的 html (一般是不可能的)
- 通過設定 headers,一開始就設定一個 UA,如:headers={
'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'}
不過一般來說是可以通過正確獲得 html 的,但是有些網站會判斷 host 是否是自己,所以有的時候我們還需要加上(這裡以我們要訪問的網易歌單介面來作為例子):'Host': 'music.163.com'
- 一開始能獲取,多次除錯後不能獲取了?這個是網站檢測到你的 IP 訪問次數過多而禁止你訪問了(也就是防止)我們就需要設定代理來避免這個問題。示例程式碼如下:

import urllib2
enable_proxy = True
proxy_handler = urllib2.ProxyHandler({"http" : 'http://some-proxy.com:8080'})
null_proxy_handler = urllib2.ProxyHandler({})
if enable_proxy:
    opener = urllib2.build_opener(proxy_handler)
else:
    opener = urllib2.build_opener(null_proxy_handler)
urllib2.install_opener(opener)

image

這樣我們就可以開始解析 html 了,不過我還是建議新增上 UA 與 host ,養成一個習慣,不要每次都試來浪費時間。於是我們獲取 html 的程式碼如下:

# 爬取網易雲音樂的爬蟲
# -*- coding: utf-8 -*-
import urllib.request
import urllib


def gethtml(url, headers={}):
    req = urllib.request.Request(url, headers=headers)
    response = urllib.request.urlopen(req)
    content = response.read().decode('utf-8')
    response.close()
    return content


url = 'http://music.163.com/discover/playlist'
url = gethtml(url, headers={
    'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
    'Host': 'music.163.com'
})
print(url)

解析 html

這裡我們使用 BeautifulSoup4 使用 css 選擇器來選擇元素來解析 html ,回到瀏覽器 F12,來分析怎麼獲得需要的資訊:

image

如圖,從上到下依次的資訊是
- 歌單封面
- 歌單名稱與連結
- 歌單播放量
- 歌單建立人以及建立人主頁

那麼我們現在就來以此通過css 選出包含內容的最小標籤。
封面圖片 img 標籤

soup.select('ul#m-pl-container li div img')

歌單名稱與連結 a 標籤

soup.select('ul#m-pl-container li div a.msk')

歌單播放量 span 標籤

soup.select('div.bottom span.nb')

歌單建立人與建立人主頁

soup.select('ul#m-pl-container li p a')

然後我們通過遍歷來輸出這些標籤中的資訊,完整程式碼如下:

# 爬取網易雲音樂的爬蟲
# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import urllib.request
import urllib

#獲取網頁
def gethtml(url, headers={}):
    req = urllib.request.Request(url, headers=headers)
    response = urllib.request.urlopen(req)
    content = response.read().decode('utf-8')
    response.close()
    return content

#解析音樂列表網頁
def parsehtmlMusicList(html):
    soup = BeautifulSoup(html, 'lxml')
    list_pic = soup.select('ul#m-pl-container li div img')
    list_nameUrl = soup.select('ul#m-pl-container li div a.msk')
    list_num = soup.select('div.bottom span.nb')
    list_author = soup.select('ul#m-pl-container li p a')
    n = 0
    length = len(list_pic)
    while n < length:
        print('歌單圖片:'+list_pic[n]['src']+'\n\n')
        print('歌單名稱:'+list_nameUrl[n]['title']+'\n\n歌單地址:'+list_nameUrl[n]['href']+'\n\n')
        print('歌單播放量:'+list_num[n].text+'\n\n')
        print('歌單作者:'+list_author[n]['title']+'\n\n作者主頁:'+list_author[n]['href']+'\n\n\n')
        n += 1


url = 'http://music.163.com/discover/playlist'
url = gethtml(url, headers={
    'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
    'Host': 'music.163.com'
})
parsehtmlMusicList(url)

最終效果如下:

image

歡迎交流。

相關推薦

Python3.7 爬蟲使用 Urllib2 BeautifulSoup4 樂歌

廢話 在前面的的部落格中我們已經能夠使用 python3 配合自帶的庫或者第三方庫抓取以及解析網頁,我們今天來試試抓取網易雲音樂的歌單資訊 分析網頁 我們現在來分析網頁 點選右側介面中的 Network 進入網路請求分析介面,如下:

手把手教你寫網路爬蟲1樂歌

Selenium:是一個強大的網路資料採集工具,其最初是為網站自動化測試而開發的。近幾年,它還被廣泛用於獲取精確的網站快照,因為它們可以直接執行在瀏覽器上。Selenium 庫是一個在WebDriver 上呼叫的API。WebDriver 有點兒像可以載入網站的瀏覽器,但是它也可以像BeautifulSoup

Python3.7 爬蟲使用 Urllib2 BeautifulSoup4解析網頁

開篇 上一篇中我們通過原生的 re 模組已經完成了網頁的解析,對於熟悉正則表示式的童鞋來說很好上手,但是對於萌新來說,還是有一定難度以及複雜度的,那麼這裡我們就來使用第三方解析包來解析獲取到的網頁吧。 BeautifulSoup 官方的 Beaut

python爬蟲xpathlxml

XPath XPath是一種在xml中查詢資訊的語言,可以用來在xml文件中對元素和屬性進行遍歷。 XPath使用路徑表示式在xml文件中選取節點,這裡注意需要逐級表現要選取節點的父子關係。 XPath符號 nodename 選取此節點的所有子節點 /

python爬蟲音樂歌曲列表

1.開啟網易雲音樂列表,按F12,選擇Doc模式,方便檢視。2.檢視網頁的請求方式--get請求3.檢視header4. 在Preview中搜索任意一首歌曲,比如:無由可以看到,歌曲列表在‘ul’標籤中,那麼我們可以通過Be阿UtigulSoup去搜索明晰了結構,就可以寫程式

Python網路爬蟲:selenium+chrome美女圖片

說明: Python版本:Python IDE:PyCharm chrome版本:我的版本63 chromedriver.exe:因為是模擬瀏覽器訪問,chrome需要再下載一個驅動,具體方式在我的上一篇部落格,內容很詳細。傳送門:Python網路爬蟲(

音樂“三部曲”:輕鬆下載音樂歌曲!

本文是承接前兩文章而來,前兩篇文章我們收集了歌手資訊和歌詞,可是光有歌手資訊和歌詞沒有歌曲怎麼行,沒有歌曲怎麼知道音調,這讓人怎麼學?怎麼聽?這不耍流氓嘛?為了向大家證明小編不是耍流氓,是耍無賴,我決定教大家直接把網易雲音樂歌手的熱門歌曲全部免費下載下來。除了已經下架不在網易資料庫的,其他的都能全部

資料採集:用XPath騰訊新聞

需要匯入的庫 import requests from lxml import etree 先用requests.get()方法請求頁面 result=requests.get("http://news.qq.com/") encode=resul

音樂“三部曲”歌手資訊!

提到歌神張學友,大家可能不會陌生或者說是如雷貫耳,他可是有著逃犯殺手之稱,這不明天1月11號是他2019世界巡迴演唱會《香港站》的開辦日期,不知香港警方有沒有做好抓逃犯的準備【手動滑稽】。對於歌神明天的演唱會,小編其實挺嚮往的,只是奈何年底了,天天要工作,作為一個程式猿,這也是沒辦法的,為了排遣內心

音樂“三部曲”:獲取音樂歌手歌詞!

上一篇文章爬取了歌手的姓名和歌手的 id ,這篇文章根據上篇爬取的歌手 id 來直接下載對應歌手的歌詞。這些我其實可以寫成一個大專案,把這個大專案拆成小專案一來方便大家的理解,二來小專案都會了的話,拼在一起就是一個完整的專案了。 上篇文章沒學會的也不要緊,私信小編可以獲取上次的爬取結果 c

Scrapy音樂和評論一、思路分析

目錄: 前提: scrapy這個框架很多人用過,網上教程也很多,但大多就是爬爬小說這種比較簡單且有規律的,網易雲音樂也有很多人寫過,也有API,不過大多是爬取了熱門歌曲,或是從歌單下手,但是考慮到歌單會有很多重複的。當然,從歌手頁的話,如果

如何用Python爬蟲音樂歌曲

今天 http 分享圖片 分享 圖片 分分鐘 參考 down 技術 今天小編帶大家一起來利用Python爬取網易雲音樂,分分鐘將網站上的音樂down到本地。 跟著小編運行過代碼的筒子們將網易雲歌詞抓取下來已經不再話下了,在抓取歌詞的時候在函數中傳入了歌手ID和歌曲名兩個參數

如何用Python爬蟲音樂歌詞

網易雲歌詞 Python網絡爬蟲 網絡爬蟲 前幾天小編給大家分享了數據可視化分析,在文尾提及了網易雲音樂歌詞爬取,今天小編給大家分享網易雲音樂歌詞爬取方法。 本文的總體思路如下: 找到正確的URL,獲取源碼; 利用bs4解析源碼,獲取歌曲名和歌曲ID; 調用網易雲歌曲API,獲取歌詞; 將歌詞寫入

python3.基礎音樂【超詳細版】

簡單學習了python爬蟲之後,我們就可以嘿咻嘿咻了...因為平時就是用網易雲聽的歌,也喜歡看歌裡的評論,所以就爬網易雲音樂評論吧! 正式進入主題 首先還是去找目標網頁並開始分析網頁結構,如下 上面的三個箭頭都是所要找的資料,分別是評論使用者,評論和點贊數,都可以用正則表示式找出來,接下來繼續找怎樣

【Java爬蟲學習】WebMagic框架爬蟲學習實戰一:資訊,並存入mysql中

最近,需要使用Java進行爬蟲編寫,就去學了Java的爬蟲。因為之前學習了Scrapy框架,所以學Java的爬蟲使用了WebMagic框架,這個框架是基於Scrapy框架開發的。大家有興趣可以去看看操作文件:  這個框架是國人開發的,所以說明文件都是中文,簡單易懂。

爬蟲入門——用python音樂熱門歌手評論數

本文參考Monkey_D_Newdun 的文章用爬蟲獲取網易雲音樂熱門歌手評論數執行平臺:Windows 10IDE:spyderPython版本:3.6瀏覽器:360一、爬蟲基本思路a. 通過URL或者檔案獲取網頁:開啟網頁-F12-找到需要獲取的url,request h

【python爬蟲自學筆記】-----中歌曲歌詞

工具:python3.6 ,pycharm 開始對網頁的內容進行爬取的時候,使用requests獲得響應,只傳url,但是沒有獲得響應,使用urllib新增請求頭部,並對response的內容使用utf-8進行解碼,使用BeautifulSoup轉換為html物件,

python3學習筆記多線程多進程

ttr pid make start lee close gif 自己 oops 線程thread,庫threading 進程process,庫Process 使用起來方法跟其他語言相似,也不需要下載其他的庫,語言自帶的庫裏就有 1.多線程的例子 1 #coding=

python3 web框架、MVCMTV

我們已經寫完了一個簡單的web框架,那麼這裡 def handle_index(): return ["<h1>hello web</h1>".encode('utf-8')] 返回的內容我們是自已一字串的形式寫出來的,那麼還可以去

Python網路爬蟲:chromdriver.exechrome版本對映及下載連結

前言:最近正在學習Python網路爬蟲,學到selenium,需要用到chrome瀏覽器的驅動,但是網上的很多地址都被牆了,而且沒有準確的驅動和chrome版本的對映,很麻煩。現在我已經解決了這些問題,現在把對映和下載連結分享出來。 (一)檢視chrome