爬取NBA球星的數(shù)據(jù)

一? 目的

? 爬取NBA球星的數(shù)據(jù)并對數(shù)據(jù)進(jìn)行分析和統(tǒng)計。

二? 流程


三? 準(zhǔn)備工作

1 在pycharm中下載requests和lmxl庫(終端中輸入pip install requests 和pip install lmxl)。

2 在Edge的擴(kuò)展中下載xpath插件(圖1),用于后面代碼位置的確定。

圖1

四 網(wǎng)頁爬取

1? 首先打開虎撲進(jìn)入NBA球員排行榜,點擊F12進(jìn)入開發(fā)者模式,點擊Network,在Name中尋找players的文件,在Headers中找到Request URL(圖2)和User-Agent(圖3)(Request URL是告訴計算機(jī)要請求的網(wǎng)頁的地址,也就是你希望從中獲取信息的網(wǎng)站頁面的網(wǎng)址。User-Agent是對你訪問網(wǎng)站的設(shè)備的介紹,用于防止被網(wǎng)站發(fā)現(xiàn)我在爬蟲)。

圖2
圖3

2 打開pycharm寫代碼用于訪問網(wǎng)站(圖4),運(yùn)用了lmxl和requests庫。目的:lmxl庫的用途是處理HTML內(nèi)容,requests庫的用途是發(fā)送請求獲取響應(yīng)。

第2,3行是導(dǎo)入所需模塊

第6行是目標(biāo)網(wǎng)頁的URL

第9,10,11行構(gòu)造請求頭,模擬瀏覽器請求

第14行是發(fā)送HTTP GET請求,獲取網(wǎng)頁內(nèi)容

圖4

3 打開插件xpath,輸入//table,他會提取所有的信息但是有的信息我們不用,所以我們進(jìn)行篩選。(圖5)

右鍵點擊需要爬取的排名,會出現(xiàn)圖6。發(fā)現(xiàn)排名的位于players_table中因為排名在tr列的第一個td中,并且我們需要爬取的是文本。

所以對所有信息篩選的代碼為‘? //table[@class="players_table"]//tr/td[1]/text()? ’(圖7)


圖5
圖6


圖7

4 以此類推,剩下的信息就是第2 3 4列分別為姓名 球隊? 得分(圖8)。


圖8


5? 爬取數(shù)據(jù)。(圖9)

? nos = e.xpath('//table[@class="players_table"]//tr/td[1]/text()'):這行代碼使用XPath表達(dá)式來選取HTML文檔中所有class屬性為"players_table"的表格中每一行的第一個單元格中的文本內(nèi)容,并將結(jié)果存儲在名為nos的變量中。

? names = e.xpath('//table[@class="players_table"]//tr/td[2]/a/text()'):這行代碼使用XPath表達(dá)式來選取HTML文檔中所有class屬性為"players_table"的表格中每一行的第二個單元格中鏈接的文本內(nèi)容(通常是球員的姓名),并將結(jié)果存儲在名為names的變量中。

? teams = e.xpath('//table[@class="players_table"]//tr/td[3]/a/text()'):這行代碼使用XPath表達(dá)式來選取HTML文檔中所有class屬性為"players_table"的表格中每一行的第三個單元格中鏈接的文本內(nèi)容(通常是球員所屬球隊的信息),并將結(jié)果存儲在名為teams的變量中。

? scores = e.xpath('//table[@class="players_table"]//tr/td[4]/text()'):這行代碼使用XPath表達(dá)式來選取HTML文檔中所有class屬性為"players_table"的表格中每一行的第四個單元格中的文本內(nèi)容(通常是球員的得分信息),并將結(jié)果存儲在名為scores的變量中。

圖9

6? 因為此時提出的信息太亂(圖10),不規(guī)整。所以我們將讓提取的信息進(jìn)行美化。

圖10

代碼使用了 `zip()` 函數(shù),它可以將多個可迭代對象(例如列表)中的元素一一對應(yīng)地打包成元組的形式。在這里,`zip()` 函數(shù)同時迭代了四個列表 `nos`、`names`、`teams` 和 `scores`,將它們中對應(yīng)位置的元素打包成元組。然后,使用 `for` 循環(huán)遍歷這些元組,每次循環(huán)得到一個元組,元組中的元素分別表示某個球員的排名、姓名、球隊和得分。最后,通過 `print()` 函數(shù)打印了每個球員的排名、姓名、球隊和得分。(圖11)

圖11

6 輸出的結(jié)果。(圖12)

圖12
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容