
前言
使用 Python 爬取 NBA 球員數(shù)據(jù)的示例代碼。通過發(fā)送 HTTP 請求,解析 HTML 頁面,然后提取出需要的排名、姓名、球隊和得分信息,并將結(jié)果保存到文件中。
導(dǎo)入需要的庫和模塊
import requests
from lxml import etree
- 使用
requests
庫發(fā)送HTTP請求。 - 使用
lxml
庫進(jìn)行HTML解析。
設(shè)置請求頭和請求地址
url = 'https://nba.hupu.com/stats/players'
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}
- 設(shè)置請求頭信息,包括用戶代理(User-Agent)。
- 設(shè)置請求的地址為’https://nba.hupu.com/stats/players’。
發(fā)送HTTP請求并獲取響應(yīng)
resp = requests.get(url, headers=headers)
- 使用
requests
庫發(fā)送HTTP GET請求,并傳入請求地址和請求頭信息。 - 將返回的響應(yīng)保存在變量
resp
中。
處理響應(yīng)結(jié)果
e = etree.HTML(resp.text)
- 使用
etree.HTML
函數(shù)將返回的響應(yīng)文本解析為一個可操作的HTML元素樹對象。 - 將解析后的結(jié)果保存在變量
e
中。
解析數(shù)據(jù)
nos = e.xpath('//table[@class="players_table"]//tr/td[1]/text()')
names = e.xpath('//table[@class="players_table"]//tr/td[2]/a/text()')
teams = e.xpath('//table[@class="players_table"]//tr/td[3]/a/text()')
scores = e.xpath('//table[@class="players_table"]//tr/td[4]/text()')
- 使用XPath表達(dá)式從HTML元素樹中提取需要的數(shù)據(jù)。
- 分別將排名(nos)、姓名(names)、球隊(teams)和得分(scores)保存在對應(yīng)的變量中。
將結(jié)果保存到文件
with open('nba.txt', 'w', encoding='utf-8') as f:
for no, name, team, score in zip(nos, names, teams, scores):
f.write(f'排名:{no} 姓名:{name} 球隊:{team} 得分:{score}\n')
- 打開一個文件
nba.txt
,以寫入模式(‘w’)進(jìn)行操作,編碼方式為UTF-8。 - 使用
zip
函數(shù)同時遍歷排名、姓名、球隊和得分,將它們合并成一個元組。 - 將每一行的數(shù)據(jù)按照指定格式寫入文件中。
完整代碼
# 引入 requests 庫,用于發(fā)送 HTTP 請求
import requests
# 引入 lxml 庫,用于解析 HTML
from lxml import etree
# 設(shè)置請求的地址
url = 'https://nba.hupu.com/stats/players'
# 設(shè)置請求頭信息,包括用戶代理(User-Agent)
headers ={
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'
}
# 發(fā)送HTTP GET請求,并傳入請求地址和請求頭信息,將返回的響應(yīng)保存在變量resp中
resp = requests.get(url, headers=headers)
# 使用etree.HTML函數(shù)將返回的響應(yīng)文本解析為一個可操作的HTML元素樹對象
e = etree.HTML(resp.text)
# 使用XPath表達(dá)式從HTML元素樹中提取需要的數(shù)據(jù)
nos = e.xpath('//table[@class="players_table"]//tr/td[1]/text()')
names = e.xpath('//table[@class="players_table"]//tr/td[2]/a/text()')
teams = e.xpath('//table[@class="players_table"]//tr/td[3]/a/text()')
scores = e.xpath('//table[@class="players_table"]//tr/td[4]/text()')
# 打開一個文件`nba.txt`,以寫入模式('w')進(jìn)行操作,編碼方式為UTF-8
with open('nba.txt', 'w', encoding='utf-8') as f:
# 使用zip函數(shù)同時遍歷排名、姓名、球隊和得分,將它們合并成一個元組
for no, name, team, score in zip(nos, names, teams, scores):
# 將每一行的數(shù)據(jù)按照指定格式寫入文件中
f.write(f'排名:{no} 姓名:{name} 球隊:{team} 得分:{score}\n')
詳細(xì)解析
# pip install requests
import requests
導(dǎo)入 requests
庫,該庫用于發(fā)送 HTTP 請求。
# pip install lxml
from lxml import etree
導(dǎo)入 lxml
庫,該庫用于解析 HTML。
# 發(fā)送的地址
url = 'https://nba.hupu.com/stats/players'
設(shè)置需要發(fā)送請求的地址。
headers ={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Safari/537.36'}
設(shè)置請求頭信息,包括用戶代理(User-Agent)。這個信息告訴服務(wù)器我們的請求是從一個瀏覽器發(fā)出的,而不是爬蟲,這樣可以避免被反爬蟲機(jī)制阻止。
# 發(fā)送請求
resp = requests.get(url,headers = headers)
使用 requests.get
方法發(fā)送 HTTP GET 請求,并傳入請求地址和請求頭信息。將返回的響應(yīng)保存在變量 resp
中。
e = etree.HTML(resp.text)
使用 etree.HTML
函數(shù)將返回的響應(yīng)文本解析為一個可操作的 HTML 元素樹對象。etree.HTML
接受一個字符串類型的參數(shù),這里使用 resp.text
來獲取響應(yīng)的文本內(nèi)容。
nos = e.xpath('//table[@class="players_table"]//tr/td[1]/text()')
names = e.xpath('//table[@class="players_table"]//tr/td[2]/a/text()')
teams = e.xpath('//table[@class="players_table"]//tr/td[3]/a/text()')
scores = e.xpath('//table[@class="players_table"]//tr/td[4]/text()')
使用 XPath 表達(dá)式從 HTML 元素樹中提取需要的數(shù)據(jù)。這里分別使用了四個 XPath 表達(dá)式來提取排名、姓名、球隊和得分的數(shù)據(jù),并將它們分別保存在 nos
、names
、teams
和 scores
變量中。
with open('nba.txt','w',encoding='utf-8') as f:
for no,name,team,score in zip(nos,names,teams,scores):
f.write(f'排名:{no} 姓名:{name} 球隊:{team} 得分:{score}\n')
以寫入模式(‘w’)打開一個名為 nba.txt
的文件,并使用 UTF-8 編碼。然后,使用 zip
函數(shù)同時遍歷排名、姓名、球隊和得分,將它們合并成一個元組。通過循環(huán)遍歷每個元組,將每行的數(shù)據(jù)按照指定格式寫入文件中。
這樣,代碼就實現(xiàn)了對 NBA 球員數(shù)據(jù)進(jìn)行爬取,并將結(jié)果保存到 nba.txt
文件中。
運行效果
文章來源:http://www.zghlxwxcb.cn/news/detail-612244.html
結(jié)束語
通過本文的示例代碼,你可以學(xué)習(xí)使用Python爬取NBA球員數(shù)據(jù)的方法。我們使用了requests庫發(fā)送HTTP請求,lxml庫進(jìn)行HTML解析,以及XPath表達(dá)式提取需要的數(shù)據(jù)。最后將結(jié)果保存到文件中。這個示例可以幫助你了解爬蟲的基本原理和操作步驟,同時也能夠獲取到有關(guān)NBA球員的數(shù)據(jù)。希望本文對你理解和掌握Python爬蟲技術(shù)有所幫助。文章來源地址http://www.zghlxwxcb.cn/news/detail-612244.html
到了這里,關(guān)于【小白必看】Python爬取NBA球員數(shù)據(jù)示例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!