Swaggy教你用python实现NBA数据统计的爬取

相信很多喜欢NBA的小伙伴们经常会关注NBA的数据统计,今天我就用虎扑NBA的得分榜为例,实现NBA数据的简单爬取。

https://nba.hupu.com/stats/players是虎扑体育的NBA球员得分榜:

Swaggy教你用python实现NBA数据统计的爬取_第1张图片

当我们右键查看该网站的源代码时,会发现所有的数据统计都存放在的标签下,而下的每个标签则表示每个球员的信息,第1、2、4个标签分别表示球员排名、球员名字和得分。

eg.

  width="46">1
  width="142" class="left">href="https://nba.hupu.com/players/lebronjames-650.html">勒布朗-詹姆斯
  width="50">href="https://nba.hupu.com/teams/lakers">湖人
  class="bg_b">33.20
  12.30-22.50
  54.7%
  1.60-5.10
  30.9%
  7.00-9.60
  73.2%
  width="50">16
  width="70">40.60
 

运用requests库和bs4库,我们可以将球员的数据爬取下来。

首先,我们编写一个getHTMLText方法,用于爬取网页的信息:

def getHTMLText(url):
    try:
        r = requests.get(url, timeout=30)
        r.raise_for_status()
        r.encoding = r.apparent_encoding
        return r.text
    except:
        return ""

其次,我们编写一个fillList方法。

因为所有的数据统计都存放在的标签下,而下的每个标签则表示每个球员的信息,第1、2、4个标签分别表示球员排名、球员名字和得分,我们采用html.parser解释器,遍历标签的所有儿子节点,将球员数据的第1、2、4个标签添加至列表中即可:

def fillList(ulist, html):
    soup = BeautifulSoup(html, "html.parser")
    for tr in soup.find('tbody').children:
        if isinstance(tr, bs4.element.Tag):
            tds = tr('td')
            ulist.append([tds[0].string, tds[1].string, tds[3].string])

最后,我们编写printList方法,将列表中的数据依次输出:

def printUnivList(ulist, num):
    for i in range(num):
        u = ulist[i]
        print("{0:<6}\t{1:{3}<10}\t{2:<6}".format(u[0],u[1],u[2],chr(12288)))
其中chr(12288)是用来将输出的空格转换成中文空格,以便对齐。

将以上方法组合编写主函数如下:

def main():
    uinfo = []
    url = 'http://nba.hupu.com/stats/players'
    html = getHTMLText(url)
    fillList(uinfo, html)
    printList(uinfo, 21)
便将NBA得分榜的前20名球员输出了: Swaggy教你用python实现NBA数据统计的爬取_第2张图片
是不是很简单呢?赶紧上手尝试一下吧(手动滑稽)

你可能感兴趣的:(Swaggy教你用python实现NBA数据统计的爬取)