自从学会了爬虫的基本用法之后,一些网页上的基本信息都可以很容易的爬取下来。今天练习爬取了腾讯NBA官网上的每日赛程的比分,就是这个:
这个网站的信息同样是存储在json文件中,在其HTML静态文件中找不到。所以我们还是老方法,直接去找到那个json文件:
在使用Python工具爬取下来这一页后,再观察其中的信息。通常这种json文件的字典中有用的信息是被一些无用的信息所包围的,所以分析时我们就一层一层的输出该字典,直到发现对我们有用的信息。此json文件的开头内容如下:
可以发现,data这个key所对应的value中有今天的日期和队名,所以我们就输出data中的‘2020-03-11’所对应的value,找到其中有用的信息如下:
可以猜想,leftName和rightName对应的就是比赛双方的队名,而leftGoal和rightGoal对应的就是双方得分,而这一点也可以从上面的图片中验证。由此我们就得到了这场比赛双方的得分情况。Python代码如下:
import urllib.request
import json
#json文件的URL地址
url="https://matchweb.sports.qq.com/kbs/list?from=NBA_PC&columnId=100000&startTime=2020-03-11&endTime=2020-03-17&from=sporthp&callback=ajaxExec&_=1583909839470"
#补充请求头信息
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36',
'Referer': 'https://nba.stats.qq.com/schedule/'
}
#获取数据
req=urllib.request.Request(url=url,headers=headers)
text=urllib.request.urlopen(req).read().decode('gbk')
#去文件开头的无用子串“ajaxExec”
text=text.strip("ajaxExec")
#去掉文件头尾的小括号
text=text[1:len(text)-1]
#加载为Python对象dic
content=json.loads(text)
#取出当前日期
date=list(content['data'].keys())[0]
print(date)
#输出当日所有比赛的比分
for i in content['data'][date]:
print(i['leftName'],end='')
print(" ",end='')
print(i['leftGoal'],end='')
print(":",end='')
print(i['rightGoal'],end='')
print(" ",end='')
print(i['rightName'])