1. 程式人生 > >學會python可以上天!20行代碼獲取鬥魚平臺房間數據,就是這麽牛逼!

學會python可以上天!20行代碼獲取鬥魚平臺房間數據,就是這麽牛逼!

python 爬蟲 web 編程 程序員

Python(發音:英[?pa?θ?n],美[?pa?θɑ:n]),是一種面向對象、直譯式電腦編程語言,也是一種功能強大的通用型語言,已經具有近二十年的發展歷史,成熟且穩定。它包含了一組完善而且容易理解的標準庫,能夠輕松完成很多常見的任務。它的語法非常簡捷和清晰,與其它大多數程序設計語言不一樣,它使用縮進來定義語句。

Python支持命令式程序設計、面向對象程序設計、函數式編程、面向切面編程、泛型編程多種編程範式。與Scheme、Ruby、Perl、Tcl等動態語言一樣,Python具備垃圾回收功能,能夠自動管理存儲器使用。它經常被當作腳本語言用於處理系統管理任務和網絡程序編寫,然而它也非常適合完成各種高級任務。Python虛擬機本身幾乎可以在所有的作業系統中運行。使用一些諸如py2exe、PyPy、PyInstaller之類的工具可以將Python源代碼轉換成可以脫離Python解釋器運行的程序。

技術分享圖片

本期用到json,requests庫來爬取網頁信息,這次爬的是一個特殊多頁式網站,普通多頁式網站只需分析不同頁面的url,找出其中的不同點,用for in來循環即可,但是鬥魚的L中不同頁面都是相同的url,這就需要去“F12”來尋找其中的區別。

工具.環境:Python3.6.5,Pycharm,windows10,Firefox

技術分享圖片

python

1.首先來尋找不同頁面的區別

以鬥魚的LOL板塊為例:嘗試切換不同頁面都是相同的url,那怎麽辦呢??????????按F12呼出開發者工具(在這推薦使用Firefox或chrome瀏覽器,我用的是Firefox)

技術分享圖片

開發者工具

要詳細學習開發者工具的請自行百度,這裏直接選擇網絡,會看到很多數據,數據發送方法分兩種,為“post”and“get”。再選擇XHR,點擊左上角的刪除鍵,再重新載入網頁,就會看到電腦又向服務器發送了多個請求。

技術分享圖片

網絡-XHR。

再重復多換幾個頁面,發現每次換的頁碼都與其中一個請求名相同

技術分享圖片

發現不同

點擊該條信息,在右邊顯示該條信息的消息頭,有一個請求網址技術分享圖片,把它復制下來,發現末尾的3就是對應的頁數。 OK 第一步結束!

技術分享圖片

python學習路線分三大階段:基礎-進階-框架-項目實戰
基礎第一階段:基礎Python的理解。基礎第二階段面對對象編程(註重編程能力)
基礎第三階段面向對象“設計思想”-封裝-繼承。基礎第四階段python高級專題。
進階班第一階段:linux基礎。第二:python web工具。第三python部署工具。
第四關系型數據庫。第五Python web框架基礎原理。
框架階段.python web開發第一階段web.py。基礎第二Django基礎。

第三flask基礎。第四tornado基礎,
項目實戰:個人博客系統-微信開發-企業OA系統=網盤系統

2.get頁面信息

打開1中get到的網址

技術分享圖片

JSON

發現裏面有我想要爬取的鬥魚房間信息,那麽就是它了,接下來要對它進行解剖。

(1)運用requests來get該網頁的信息

import requestsimport jsonurls = ['https://www.douyu.com/gapi/rkc/directory/2_1/{}'.format(page) for page in range(1, 5)]for url in urls: res = requests.get(url) print(res.text) # 可以想先看看get到的是個什麽東西

這裏運用for in循環來get到1-5頁的網頁信息for page in range(1, 5),具體見上面代碼

(2)運用json庫來將已編碼的 JSON 字符串解碼為 Python 對象

import requestsimport jsonurls = ['https://www.douyu.com/gapi/rkc/directory/2_1/{}'.format(page) for page in range(1, 5)]for url in urls: res = requests.get(url) j = json.loads(res.text) print(j) # 可以看到已解碼的對象

json.dumps:將 Python 對象編碼成 JSON 字符串json.loads:將已編碼的 JSON 字符串解碼為 Python 對象

3.處理對象數據

技術分享圖片

對象數據

看到了一堆糊糊,這時Firefox的優勢就體現出來了

技術分享圖片

json

可以看到各層的所屬關系,便於接下來的提取數據,下面是完整代碼:

import requestsimport jsonurls = ['https://www.douyu.com/gapi/rkc/directory/2_1/{}'.format(page) for page in range(1, 5)]for url in urls: res = requests.get(url) j = json.loads(res.text) l1 = j['data'] # 通過觀察可以發現要的數據在data下 l2 = l1['rl'] #在觀察發現在data的rl中 tplt = '{0:{4}<20}\t{1:<12}\t{2:{4}<25}\t{3:<12}' print(tplt.format('主播', '房間號', '房間名', '熱度', chr({{12288:0}}))) for i in range(len(l2)): # 這裏用到for循環來處理一個列表下多個字典的數據 zhubo = l2[i]['nn'] room = l2[i]['rid'] redu = l2[i]['ol'] roomname = l2[i]['rn'] print(tplt.format(zhubo, room, roomname, redu, chr({{12288:0}})))

4.結果

運行程序

技術分享圖片

鬥魚LOL板塊房間數據

遇到的問題:在名字中出現中英文混合的字符,會出現對不了齊的問題,有解決方法的可以在評論區分享!謝謝

技術分享圖片

Python可以做什麽?
web開發和 爬蟲是比較適合 零基礎的
自動化運維 運維開發 和 自動化測試 是適合 已經在做運維和測試的人員
大數據 數據分析 這方面 是很需要專業的 專業性相對而言比較強
科學計算 一般都是科研人員 在用
機器學習 和 人工智能 首先 學歷 要求高 其次 高數要求高 難度很大

我有一個微信公眾號,經常會分享一些python技術相關的幹貨;如果你喜歡我的分享,可以用微信搜索“python語言學習”關註。

歡迎大家加入千人交流答疑群:588+090+942


學會python可以上天!20行代碼獲取鬥魚平臺房間數據,就是這麽牛逼!