Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲国产精品久久久久666,男女爽爽大片,日韩一级一欧美一级国产

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          手把手教你寫Python網(wǎng)絡(luò)爬蟲(1):網(wǎng)易云音樂歌單

          要:從零開始寫爬蟲,初學(xué)者的速成指南!

          需要免費(fèi)獲取本文章講解的視頻+源碼,關(guān)注+轉(zhuǎn)發(fā)此文然后私信我回復(fù)“音樂”即可領(lǐng)取資料,也歡迎大家和我一起交流學(xué)習(xí)Python,共同成長

          封面:

          封面

          大家好,《手把手教你寫網(wǎng)絡(luò)爬蟲》連載開始了!在筆者的職業(yè)生涯中,幾乎沒有發(fā)現(xiàn)像網(wǎng)絡(luò)爬蟲這樣的編程實(shí)踐,可以同時(shí)吸引程序員和門外漢的注意。本文由淺入深的把爬蟲技術(shù)和盤托出,為初學(xué)者提供一種輕松的入門方式。請(qǐng)跟隨我們一起踏上爬蟲學(xué)習(xí)的打怪升級(jí)之路吧!

          介紹

          什么是爬蟲?

          先看看百度百科的定義:

          網(wǎng)絡(luò)爬蟲

          簡單的說網(wǎng)絡(luò)爬蟲(Web crawler)也叫做網(wǎng)絡(luò)鏟(Web scraper)、網(wǎng)絡(luò)蜘蛛(Web spider),其行為一般是先“爬”到對(duì)應(yīng)的網(wǎng)頁上,再把需要的信息“鏟”下來。

          為什么學(xué)習(xí)爬蟲?

          看到這里,有人就要問了:google、百度等搜索引擎已經(jīng)幫我們抓取了互聯(lián)網(wǎng)上的大部分信息了,為什么還要自己寫爬蟲呢?這是因?yàn)?,需求是多樣的。比如在企業(yè)中,爬取下來的數(shù)據(jù)可以作為數(shù)據(jù)挖掘的數(shù)據(jù)源。甚至有人為了炒股,專門抓取股票信息。筆者就見過有人為了分析房價(jià),自學(xué)編程,爬了綠中介的數(shù)據(jù)。

          在大數(shù)據(jù)深入人心的時(shí)代,網(wǎng)絡(luò)爬蟲作為網(wǎng)絡(luò)、存儲(chǔ)與機(jī)器學(xué)習(xí)等領(lǐng)域的交匯點(diǎn),已經(jīng)成為滿足個(gè)性化網(wǎng)絡(luò)數(shù)據(jù)需求的最佳實(shí)踐。還猶豫什么?讓我們開始學(xué)習(xí)吧!

          語言&環(huán)境

          語言:人生苦短,我用Python。讓Python帶我們飛!

          Python

          urllib.request:這是Python自帶的庫,不需要單獨(dú)安裝,它的作用是為我們打開url獲取html的內(nèi)容。Python官方文檔的介紹:The urllib.request module defines functions and classes which help in opening URLs (mostly HTTP) in a complex world — basic and digest authentication, redirections, cookies and more.

          BeautifulSoup:是一個(gè)可以從HTML或XML文件中提取數(shù)據(jù)的Python庫。它能夠通過你喜歡的轉(zhuǎn)換器實(shí)現(xiàn)慣用的文檔導(dǎo)航,查找,修改文檔的方式。Beautiful Soup會(huì)幫你節(jié)省數(shù)小時(shí)甚至數(shù)天的工作時(shí)間。安裝比較簡單:

          $pip install beautifulsoup4

          驗(yàn)證的方法,進(jìn)入Python直接import一下,如果沒有異常,那就說明安裝成功了!

          BeautifulSoup

          “美味的湯,綠色的濃湯,

          在熱氣騰騰的蓋碗里裝!

          誰不愿意嘗一嘗,這樣的好湯?

          晚餐用的湯,美味的湯!”

          BeautifulSoup庫的名字取自《愛麗絲夢(mèng)游仙境》里的同名詩歌。

          爬取數(shù)據(jù)

          接下來,我們就用urllib.request獲取html內(nèi)容,再用BeautifulSoup提取其中的數(shù)據(jù),完成一次簡單的爬取。

          urllib.request

          把這段代碼保存為get_html.py,然后運(yùn)行,看看輸出了什么:

          get_html.py

          果然,輸出了http://jr.jd.com 這個(gè)網(wǎng)頁的全部HTML代碼。

          輸出的代碼簡直無法直視,如何方便的找到我們想抓取數(shù)據(jù)呢?用Chrome打開url,然后按F12,再按Ctrl + Shift + C。如果我們要抓導(dǎo)航欄,就用鼠標(biāo)點(diǎn)擊任意一個(gè)導(dǎo)航欄的項(xiàng)目,瀏覽器就在html中找到了它的位置。效果如下:

          HTML代碼

          定位到的html代碼:

          html代碼

          有了這些信息,就可以用BeautifulSoup提取數(shù)據(jù)了。升級(jí)一下代碼:

          BeautifulSoup

          把這段代碼保存為get_data.py,然后運(yùn)行,看看輸出了什么:

          get_data.py

          沒錯(cuò),得到了我們想要的數(shù)據(jù)!

          BeautifulSoup提供一些簡單的、Python式的函數(shù)用來處理導(dǎo)航、搜索、修改分析樹等功能。它是一個(gè)工具箱,通過解析文檔為用戶提供需要抓取的數(shù)據(jù),因?yàn)楹唵?,所以不需要多少代碼就可以寫出一個(gè)完整的應(yīng)用程序。怎么樣,是不是覺得只要復(fù)制粘貼就可以寫爬蟲了?簡單的爬蟲確實(shí)是可以的!

          一個(gè)迷你爬蟲

          我們先定一個(gè)小目標(biāo):爬取網(wǎng)易云音樂播放數(shù)大于500萬的歌單。

          打開歌單的url: http://music.163.com/#/discover/playlist,然后用BeautifulSoup提取播放數(shù)<span class="nb">3715</span>。結(jié)果表明,我們什么也沒提取到。難道我們打開了一個(gè)假的網(wǎng)頁?

          動(dòng)態(tài)網(wǎng)頁:所謂的動(dòng)態(tài)網(wǎng)頁,是指跟靜態(tài)網(wǎng)頁相對(duì)的一種網(wǎng)頁編程技術(shù)。靜態(tài)網(wǎng)頁,隨著html代碼的生成,頁面的內(nèi)容和顯示效果就基本上不會(huì)發(fā)生變化了——除非你修改頁面代碼。而動(dòng)態(tài)網(wǎng)頁則不然,頁面代碼雖然沒有變,但是顯示的內(nèi)容卻是可以隨著時(shí)間、環(huán)境或者數(shù)據(jù)庫操作的結(jié)果而發(fā)生改變的。

          值得強(qiáng)調(diào)的是,不要將動(dòng)態(tài)網(wǎng)頁和頁面內(nèi)容是否有動(dòng)感混為一談。這里說的動(dòng)態(tài)網(wǎng)頁,與網(wǎng)頁上的各種動(dòng)畫、滾動(dòng)字幕等視覺上的動(dòng)態(tài)效果沒有直接關(guān)系,動(dòng)態(tài)網(wǎng)頁也可以是純文字內(nèi)容的,也可以是包含各種動(dòng)畫的內(nèi)容,這些只是網(wǎng)頁具體內(nèi)容的表現(xiàn)形式,無論網(wǎng)頁是否具有動(dòng)態(tài)效果,只要是采用了動(dòng)態(tài)網(wǎng)站技術(shù)生成的網(wǎng)頁都可以稱為動(dòng)態(tài)網(wǎng)頁。

          現(xiàn)在我們明白了,這是一個(gè)動(dòng)態(tài)網(wǎng)頁,我們得到它的時(shí)候,歌單還沒請(qǐng)求到呢,當(dāng)然什么都提取不出來!

          我們之前的技術(shù)不能執(zhí)行那些讓頁面產(chǎn)生各種神奇效果的JavaScript 代碼。如果網(wǎng)站的HTML頁面沒有運(yùn)行JavaScript,就可能和你在瀏覽器里看到的樣子完全不同,因?yàn)闉g覽器可以正確地執(zhí)行JavaScript。用Python 解決這個(gè)問題只有兩種途徑:直接從JavaScript 代碼里采集內(nèi)容,或者用Python 的第三方庫運(yùn)行JavaScript,直接采集你在瀏覽器里看到的頁面。我們當(dāng)然選擇后者。今天第一課,不深究原理,先簡單粗暴的實(shí)現(xiàn)我們的小目標(biāo)。

          Selenium:是一個(gè)強(qiáng)大的網(wǎng)絡(luò)數(shù)據(jù)采集工具,其最初是為網(wǎng)站自動(dòng)化測試而開發(fā)的。近幾年,它還被廣泛用于獲取精確的網(wǎng)站快照,因?yàn)樗鼈兛梢灾苯舆\(yùn)行在瀏覽器上。Selenium 庫是一個(gè)在WebDriver 上調(diào)用的API。WebDriver 有點(diǎn)兒像可以加載網(wǎng)站的瀏覽器,但是它也可以像BeautifulSoup對(duì)象一樣用來查找頁面元素,與頁面上的元素進(jìn)行交互(發(fā)送文本、點(diǎn)擊等),以及執(zhí)行其他動(dòng)作來運(yùn)行網(wǎng)絡(luò)爬蟲。安裝方式與其他Python第三方庫一樣。

          $pip install Selenium

          驗(yàn)證一下:

          Selenium

          Selenium 自己不帶瀏覽器,它需要與第三方瀏覽器結(jié)合在一起使用。例如,如果你在Firefox 上運(yùn)行Selenium,可以直接看到一個(gè)Firefox 窗口被打開,進(jìn)入網(wǎng)站,然后執(zhí)行你在代碼中設(shè)置的動(dòng)作。雖然這樣可以看得更清楚,但不適用于我們的爬蟲程序,爬一頁就打開一頁效率太低,所以我們用一個(gè)叫PhantomJS的工具代替真實(shí)的瀏覽器。

          PhantomJS:是一個(gè)“無頭”(headless)瀏覽器。它會(huì)把網(wǎng)站加載到內(nèi)存并執(zhí)行頁面上的JavaScript,但是它不會(huì)向用戶展示網(wǎng)頁的圖形界面。把Selenium和PhantomJS 結(jié)合在一起,就可以運(yùn)行一個(gè)非常強(qiáng)大的網(wǎng)絡(luò)爬蟲了,可以處理cookie、JavaScript、header,以及任何你需要做的事情。

          PhantomJS并不是Python的第三方庫,不能用pip安裝。它是一個(gè)完善的瀏覽器,所以你需要去它的官方網(wǎng)站下載,然后把可執(zhí)行文件拷貝到Python安裝目錄的Scripts文件夾,像這樣:

          Scripts文件夾

          開始干活!

          打開歌單的第一頁:

          http://music.163.com/#/discover/playlist/?order=hot&cat=%E5%85%A8%E9%83%A8&limit=35&offset=0

          用Chrome的“開發(fā)者工具”F12先分析一下,很容易就看穿了一切。

          html代碼

          播放數(shù)nb (number broadcast):29915

          封面 msk (mask):有標(biāo)題和url

          同理,可以找到“下一頁”的url,最后一頁的url是“javascript:void(0)”。

          最后,用18行代碼即可完成我們的工作。

          代碼

          把這段代碼保存為get_data.py,然后運(yùn)行。運(yùn)行結(jié)束后,在程序的目錄里生成了一個(gè)playlist.csv文件。

          playlist.csv文件

          看到成果后是不是很有成就感?如果你感興趣,還可以按照這個(gè)思路,找找評(píng)論數(shù)最多的單曲,再也不用擔(dān)心沒歌聽了!

          需要免費(fèi)獲取本文章講解的視頻+源碼,關(guān)注+轉(zhuǎn)發(fā)此文然后私信我回復(fù)“音樂”即可領(lǐng)取資料,也歡迎大家和我一起交流學(xué)習(xí)Python,共同成長

          今天的內(nèi)容比較淺顯,希望對(duì)你有用。就先介紹到這里,我們下期再見!

          易云音樂2018年度聽歌報(bào)告—遇見你,真好。

          相信有不少人在上周,應(yīng)該已經(jīng)看過自己網(wǎng)易云音樂的年度報(bào)告了。

          小F也是去湊湊熱鬧,瞅了一波自己的年度聽歌報(bào)告。

          那么你在云村又聽了多少首歌,聽到最多的歌詞又是什么呢?

          2018年你的年度歌手又是誰,哪些又是你最愛的歌呢?

          不過相比去年,我的票圈并沒有很多發(fā)自己年度報(bào)告的朋友。

          不得不說,版權(quán)之爭開始,網(wǎng)易云音樂似乎就在走下坡路。

          很多喜歡的歌聽不了,這應(yīng)該是大家共同的痛點(diǎn)。

          最大的印象就是周董的歌,在愚人節(jié)時(shí)下架了,原以為只是個(gè)玩笑,不想?yún)s是真的。

          本次通過對(duì)網(wǎng)易云音樂華語歌單數(shù)據(jù)的獲取,對(duì)華語歌單數(shù)據(jù)進(jìn)行可視化分析。

          可視化庫不采用pyecharts,來點(diǎn)新東西。

          使用matplotlib可視化庫,利用這個(gè)底層庫來進(jìn)行可視化展示。

          / 01 / 網(wǎng)頁分析

          01 歌單索引頁



          選取華語熱門歌單頁面。

          獲取歌單播放量,名稱,及作者,還有歌單詳情頁鏈接。

          本次一共獲取了1302張華語歌單。

          02 歌單詳情頁



          獲取歌單詳情頁信息,信息比較多。

          有歌單名,收藏量,評(píng)論數(shù),標(biāo)簽,介紹,歌曲總數(shù),播放量,收錄的歌名。

          這里歌曲的時(shí)長、歌手、專輯信息在網(wǎng)頁的iframe中。

          需要用selenium去獲取信息,鑒于耗時(shí)過長,小F選擇放棄...

          有興趣的小伙伴,可以試一下哈...

          / 02 / 數(shù)據(jù)獲取

          01 歌單索引頁

          from bs4 import BeautifulSoup
          import requests
          import time
          headers = {
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
          }
          for i in range(0, 1330, 35):
           print(i)
           time.sleep(2)
           url = 'https://music.163.com/discover/playlist/?cat=歐美&order=hot&limit=35&offset=' + str(i)
           response = requests.get(url=url, headers=headers)
           html = response.text
           soup = BeautifulSoup(html, 'html.parser')
           # 獲取包含歌單詳情頁網(wǎng)址的標(biāo)簽
           ids = soup.select('.dec a')
           # 獲取包含歌單索引頁信息的標(biāo)簽
           lis = soup.select('#m-pl-container li')
           print(len(lis))
           for j in range(len(lis)):
           # 獲取歌單詳情頁地址
           url = ids[j]['href']
           # 獲取歌單標(biāo)題
           title = ids[j]['title']
           # 獲取歌單播放量
           play = lis[j].select('.nb')[0].get_text()
           # 獲取歌單貢獻(xiàn)者名字
           user = lis[j].select('p')[1].select('a')[0].get_text()
           # 輸出歌單索引頁信息
           print(url, title, play, user)
           # 將信息寫入CSV文件中
           with open('playlist.csv', 'a+', encoding='utf-8-sig') as f:
           f.write(url + ',' + title + ',' + play + ',' + user + '\n')
          

          獲取歌單索引頁信息如下,共1302張華語歌單。



          02 歌單詳情頁

          from bs4 import BeautifulSoup
          import pandas as pd
          import requests
          import time
          df = pd.read_csv('playlist.csv', header=None, error_bad_lines=False, names=['url', 'title', 'play', 'user'])
          headers = {
           'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
          }
          for i in df['url']:
           time.sleep(2)
           url = 'https://music.163.com' + i
           response = requests.get(url=url, headers=headers)
           html = response.text
           soup = BeautifulSoup(html, 'html.parser')
           # 獲取歌單標(biāo)題
           title = soup.select('h2')[0].get_text().replace(',', ',')
           # 獲取標(biāo)簽
           tags = []
           tags_message = soup.select('.u-tag i')
           for p in tags_message:
           tags.append(p.get_text())
           # 對(duì)標(biāo)簽進(jìn)行格式化
           if len(tags) > 1:
           tag = '-'.join(tags)
           else:
           tag = tags[0]
           # 獲取歌單介紹
           if soup.select('#album-desc-more'):
           text = soup.select('#album-desc-more')[0].get_text().replace('\n', '').replace(',', ',')
           else:
           text = '無'
           # 獲取歌單收藏量
           collection = soup.select('#content-operation i')[1].get_text().replace('(', '').replace(')', '')
           # 歌單播放量
           play = soup.select('.s-fc6')[0].get_text()
           # 歌單內(nèi)歌曲數(shù)
           songs = soup.select('#playlist-track-count')[0].get_text()
           # 歌單評(píng)論數(shù)
           comments = soup.select('#cnt_comment_count')[0].get_text()
           # 輸出歌單詳情頁信息
           print(title, tag, text, collection, play, songs, comments)
           # 將詳情頁信息寫入CSV文件中
           with open('music_message.csv', 'a+', encoding='utf-8-sig') as f:
           f.write(title + ',' + tag + ',' + text + ',' + collection + ',' + play + ',' + songs + ',' + comments + '\n')
           # 獲取歌單內(nèi)歌曲名稱
           li = soup.select('.f-hide li a')
           for j in li:
           with open('music_name.csv', 'a+', encoding='utf-8-sig') as f:
           f.write(j.get_text() + '\n')
          

          獲取的1302張華語歌單的詳情。



          1302張歌單里的121118首歌。



          / 03 / 數(shù)據(jù)可視化

          可視化代碼已上傳GitHub,點(diǎn)擊左下角閱讀原文即可訪問?。。?/strong>

          01 歌曲出現(xiàn)次數(shù) TOP10

          榜上的十首歌,除了「水星記」,小F聽得次數(shù)都不少。

          那么你又是如何的呢?

          在小F的印象里,這些歌都曾在網(wǎng)易云音樂熱歌榜的榜首出現(xiàn)過。

          02 歌單貢獻(xiàn)UP主 TOP10



          10大歌單貢獻(xiàn)UP主,感謝這些辛勤的“搬運(yùn)工”,給大家?guī)韮?yōu)質(zhì)的歌單。

          給廣大懶人癌患者,亦或選擇困難癥患者,帶來福利。

          03 歌單播放量 TOP10



          歌單播放量前十名單,第一名7000多萬播放量。

          其實(shí)matplotlib生成的圖是挺清楚的,只不過一上傳就變模糊了。

          所以這里你可能會(huì)覺得圖片質(zhì)量不行...

          其實(shí)并不是,為此小F做了相應(yīng)的圖表,具體見文末~

          04 歌單收藏量 TOP10



          同樣是好東西,收藏收藏?。?!

          有一些歌單和播放量TOP10里歌單有重復(fù)。

          05 歌單評(píng)論數(shù) TOP10



          歌單「再見大俠:武俠小說泰斗金庸逝世」評(píng)論數(shù)最多。

          相信不少人的閱讀時(shí)光,就是與金庸前輩的武俠小說一起度過。

          飛雪連天射白鹿,笑書神俠倚碧鴛。

          還有由小說改編成的電視劇,都是經(jīng)典!!!

          小F武俠小說看的少,武俠電視劇看的多...

          06 歌單收藏?cái)?shù)量分布情況



          將收藏?cái)?shù)做對(duì)數(shù)處理,使得能直觀看出歌單收藏?cái)?shù)的分布。

          主要分布在0-15萬之間(ln(150000)=12)。

          07 歌單播放數(shù)量分布情況



          歌單播放數(shù)主要分布在0-1000萬。

          其中l(wèi)n(10000000)=16。

          08 歌單標(biāo)簽圖



          既然選取的是華語歌單,那么華語這二字必不可少,而且還占大頭。

          那么就看看除了華語,還有什么其他標(biāo)簽。

          「流行」沒啥好說的。

          「古風(fēng)」「說唱」「民謠」近些年來熱度是越來越高,不過也有玩壞的時(shí)候。

          比如「離人愁」、「一人我飲酒醉」,小F作為吃瓜群眾,只能說且行且珍惜...

          09 歌單介紹詞云圖



          歌單介紹詞云圖,希望你能找到你喜歡某首歌的原因?。。?/p>

          到底是希望,還是青春,亦或是回憶呢?

          / 04 / 總結(jié)

          最后,把本次搜刮的干貨,分享給大家。







          可視化及相關(guān)代碼都放「GitHub」上頭了。

          有興趣的加群:960410445

          項(xiàng)目為前幾天收費(fèi)幫學(xué)妹做的一個(gè)項(xiàng)目,Java EE JSP項(xiàng)目,在工作環(huán)境中基本使用不到,但是很多學(xué)校把這個(gè)當(dāng)作編程入門的項(xiàng)目來做,故分享出本項(xiàng)目供初學(xué)者參考。

          一、項(xiàng)目描述

          SpringBoot+Mybatis+MySQL5.7的輕語音樂網(wǎng)

          系統(tǒng)有1權(quán)限:管理員

          二、主要功能

          用戶管理模塊:用戶登錄、用戶注冊(cè)、修改密碼

          榜單列表模塊:動(dòng)態(tài)地從數(shù)據(jù)庫中獲取歌曲的鏈接和數(shù)據(jù)在榜單中顯示

          歌曲搜索模塊:在首頁的搜索框中可以輸入關(guān)鍵字進(jìn)行歌曲的模糊搜索

          歌曲收藏模塊:在榜單列表中或搜索頁面中可以點(diǎn)擊歌曲進(jìn)行收藏

          我的音樂模塊:收藏的歌曲會(huì)被添加到我的音樂列表中,在我的音樂列表中也可以對(duì)歌曲進(jìn)行刪除操作

          音樂播放器模塊:在榜單、搜索頁面和我的音樂列表等地方點(diǎn)擊歌曲可以跳轉(zhuǎn)到播放頁面進(jìn)行播放。播放頁面顯示播放進(jìn)度條,刪除歌曲,暫停等操作。播放頁面背景為模糊背景,根據(jù)歌手的專輯圖片自動(dòng)變化。

          三、系統(tǒng)運(yùn)行

          登錄:

          http://localhost:8082/index.html

          賬號(hào)密碼:

          李權(quán) 10086

          四、項(xiàng)目截圖


          主站蜘蛛池模板: 99精品国产高清一区二区麻豆 | 内射少妇一区27P| 在线免费视频一区二区| 中文字幕久久亚洲一区| 精品国产一区二区三区AV| 日韩人妻无码一区二区三区综合部| 免费一本色道久久一区| 国产内射在线激情一区| 亚洲日本一区二区三区在线不卡 | 亚洲AV无码片一区二区三区| 丝袜人妻一区二区三区| 肥臀熟女一区二区三区 | 国产AV一区二区三区无码野战| 国产一区二区三区不卡在线观看 | 日韩精品无码一区二区中文字幕| 色一情一乱一伦一区二区三区| 四虎在线观看一区二区| 亚洲乱码av中文一区二区 | 日韩视频在线观看一区二区| 国产在线精品一区二区| 国产日韩精品一区二区在线观看播放| 蜜臀AV无码一区二区三区| 亚洲国产激情在线一区| 精品人妻码一区二区三区| 一区二区免费视频| 国产日韩一区二区三区| 少妇人妻精品一区二区| 日韩美一区二区三区| 精品一区二区高清在线观看| 国产精品免费大片一区二区| AV怡红院一区二区三区| 亚洲AV无码一区东京热久久| 中文字幕不卡一区| 在线视频一区二区三区| 毛片一区二区三区| 在线精品日韩一区二区三区| 国产精品亚洲一区二区无码 | 色噜噜狠狠一区二区| 国产麻豆剧果冻传媒一区| 亚洲国产成人久久一区WWW | 久久久久成人精品一区二区|