天天看點

爬蟲大作業  

Python抓取NBA現役球員的基本資訊資料

一、要求

選擇一個熱點或者你感興趣的主題、爬取的對象與範圍,爬取相應的内容并做資料分析與文本分析,形成一篇有說明、技術要點、有資料、有資料分析圖形化展示與說明、文本分析圖形化展示與說明的文章。

資料來源:NBA中國官網

庫:

requests 用于解析頁面文本資料

pandas   用于處理資料

import requests

import pandas as pd

user_agent = 'User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Maxthon 2.0)'

headers = {'User-Agent':user_agent}

url='http://china.nba.com/static/data/league/playerlist.json'

#解析網頁

r=requests.get(url,headers=headers).json()

num=int(len(r['payload']['players']))-1 #得到清單r['payload']['players']的長度

p1_cols=[] #用來存放p1數組的列

p2_cols=[] #用來存放p2數組的列

#周遊其中一個['playerProfile'],['teamProfile'] 得到各自列名,添加到p1_cols和p2_cols清單中

for x in r['payload']['players'][0]['playerProfile']:

p1_cols.append(x)

for y in r['payload']['players'][0]['teamProfile']:

p2_cols.append(y)

p1=pd.DataFrame(columns=p1_cols) #初始化一個DataFrame p1 用來存放playerProfile下的資料

p2=pd.DataFrame(columns=p2_cols) #初始化一個DataFrame p1 用來存放playerProfile下的資料

#周遊一次得到一個球員的資訊,分别添加到DataFrame數組中

for z in range(num):

player=pd.DataFrame([r['payload']['players'][z]['playerProfile']])

team=pd.DataFrame([r['payload']['players'][z]['teamProfile']])

p1=p1.append(player,ignore_index=True)

p2=p2.append(team,ignore_index=True)

p3=pd.merge(p1,p2,left_index=True,right_index=True)

p3.to_csv('f://nba_player.csv',index=False)

爬蟲大作業  

資料:

爬蟲大作業  

了解下基本的資料情況

爬蟲大作業  

截止全明星賽前有498名現役球員

爬蟲大作業  

那麼城市球員數量具體是多少呢?

 p3['country'].value_counts()

爬蟲大作業  

 球隊的球員數:

p3['displayAbbr'].value_counts()

爬蟲大作業  

也就是說498名現役大名單球員裡,有385名美國人

每一屆球員的情況

p3['draftYear'].value_counts()

爬蟲大作業  
爬蟲大作業  

2019年4月29日火箭VS勇士賽前分析頁面 https://sports.qq.com/a/20190428/006551.htm

from bs4 import BeautifulSoup

url='https://sports.qq.com/a/20190428/006551.htm'

res=requests.get(url)

res.encoding='gb2312'

res.text

爬蟲大作業  
爬蟲大作業  

 生成詞雲:

from wordcloud import WordCloud

import matplotlib.pyplot as plt

import jieba

txt=open(r'123.txt','r',encoding='utf-8').read()

wcdict1=[line.strip() for line in open('123.txt',encoding='utf-8').readlines()]

jieba.load_userdict(wcdict1)

# wcdict2=[line.strip() for line in open('stop_chinese2.txt',encoding='utf-8').readlines()]

# jieba.load_userdict(wcdict2)

wordsls = jieba.lcut(txt)

wcdict = {}

for word in wordsls:

if word not in wcdict1:

if len(word)==1:

continue

else:

wcdict[word]=wcdict.get(word,0)+1

wails=list(wcdict.items())

wails.sort(key=lambda x:x[1], reverse=True)

cut_text = " ".join(wordsls)

'print(cut_text)'

mywc = WordCloud(font_path = 'msyh.ttf').generate(cut_text)

plt.imshow(mywc)

plt.axis("off")

plt.show()

for i in range(25):

print(wails[i])

爬蟲大作業