欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何爬取NBA赛事数据?

程序员文章站 2024-01-13 13:34:46
...

如何爬取NBA赛事数据?

不知道有没有小伙伴最近在看 NBA 总决赛的呢? 小编我也是一位篮球迷,可是自从上了大学之后却很少碰球了,所谓沉迷代码之中无法自拔,但是一颗热爱篮球的心从未被磨灭过。小编时刻都有关注着总决赛的数据状况,但是身为一位程序员,总要时刻都能体现自己的高逼格吧,于是大手一挥,便写了一个程序爬取 NBA 比赛的赛事数据,以便可以外人眼中装逼出我热爱篮球的心,当然也是真的热爱!


成果展示:


如何爬取NBA赛事数据?


方法学习:

   1如何将数据写入 excel :

      

    导入模块:


 import xlwt

    

    新建一个excel文件:

  

myfile = xlwt.Workbook()


     新建一个sheet

   

sheet = myfile.add_sheet("sheet1", cell_overwrite_ok=True)


在myfile文件中新建一个叫”sheet1”的新sheet,后面的cell_overwrite_ok

参数表示允许覆盖写入。即sheet1当中加入已经存在内容,会覆盖原来的内容写入。
  往sheet中写入内容

sheet.write(00"test")


    表示往第0行第0列写入“test”字符串

    关闭文件
myfile.save("filename.xls")
最后一定记得关闭文件完成写入过程

    2、Beautiful Soup + find_all() 的使用

    

find_all() 方法搜索当前tag的所有tag子节点,并判断是否符合过滤器的条件.这里有几个例子:



soup.find_all("title")
# [<title>The Dormouse's story</title>]

soup.find_all("p""title")
# [<p class="title"><b>The Dormouse's story</b></p>]

soup.find_all("a")
# [ <a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]

soup.find_all(id="link2")
# [<a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>]

import re
soup.find(text=re.compile("sisters"))
# u'Once upon a time there were three little sisters; and their names were\n'
soup.find_all("a", class_="sister")
# [<a class="sister" href="http://example.com/elsie" id="link1">Elsie</a>,
#  <a class="sister" href="http://example.com/lacie" id="link2">Lacie</a>,
#  <a class="sister" href="http://example.com/tillie" id="link3">Tillie</a>]


一定要注意使用 find_all() 返回的是一个列表,具体请大家参考:Beautiful Soup 官方文档!


网页分析:


重点看的就是我画了箭头的地方,因为用的是 find_all() 所以要自己找到网页中的 class 或者其他的 tag 来进行判断抓取,只要理解了上面所说的方法,再结合代码进行参考,我相信你很快就能掌握新的抓取方法!我们要爬取的目标比较多,所以代码也就写的比较长!

    

如何爬取NBA赛事数据?


如何爬取NBA赛事数据?


获取网页请求数据:

这个已经是一个老套路了,相信一路坚持看教程的人都已经学会了的吧!

如何爬取NBA赛事数据?


保存到 excel 中:


详细的操作我已经在上面的「方法学习」中介绍过了,这里就不在啰嗦,列出一部分给大家看的,需要注意的是 for 循环的使用,以及代码中 sum 的作用,我个人觉得这个操作还是非常有效的减少了代码长度,当然也欢迎指教!

如何爬取NBA赛事数据?

如何爬取NBA赛事数据?


优化改进:


本次的程序当然还有一些不足的地方,比如代码长度的优化,还有这个程序只能爬取一场比赛,如何将几场比赛的数据都爬取下来!


本次完整的代码我已经上传到 Github 上,需要的同学可以点击「阅读原文」就可以看到完整的代码啦!



最近有点忙,一定会努力挤时间出来与大家分享的!



如果觉得文章还不错的话,还请大家点赞分享下。算是对「fightjiang」最大的支持!



       每 天 分 享 Python 干 货

       如何爬取NBA赛事数据?