CBA联赛正进行得如火如荼,而20支CBA球队各自的阵容深度究竟几何?
Scrapy框架 + MongoDB,获取CBA中国男篮所有球队球员的基本信息,以便往后的数据分析使用。
开发环境
- python3.7
- Scrapy框架及其组件
- json模块
- pymongo模块
获取分析:
1.获取球队链接
获取球队链接的网页是通过Ajax技术异步加载得到。
通过抓包发现,所需的数据正是json格式,是理想中的情况。
#解析球队链接:
def parse(self, response):
club0 = json.loads(response.text)
clubs = club0['data']
baseurl = "https://api-all.9h-sports.com/cba-data/api/cba/v1/league/player-history?clubId={}"
for oneclub in clubs:
clubname = oneclub['name']
clubid = oneclub['club_id']
cluburl = baseurl.format(clubid)
print (clubname + cluburl)
yield scrapy.Request(url=cluburl,callback=self.parsecluburl,dont_filter=True,meta={'clubname':clubname})
2.进入各支球队URL链接页面,获取球队名单下所有球员的数据。
通过抓包发现,所需要的球员数据同样是通过Ajax技术异步加载得到,且数据格式也和上一个页面相同,还是json格式的数据。
#解析球员数据
def parsecluburl(self,response0):
players0 = json.loads(response0.text)
players = players0['data']
for player in players:
...
allitem = items.CbaplayerItem(
playername = playername,
playernumber = playernumber,
playercountry = playercountry,
playerposition = playerposition,
playerheight = playerheight,
playerweight = playerweight,
playerbirth = playerbirth,
playerclub = playerclub
)
yield allitem
最后将获取到的所有球员的数据通过pipelines组件存入MongoDB数据库。
#pipelines入库
import pymongo
import json
class CbaplayerPipeline(object):
def __init__(self):
self.conn = pymongo.MongoClient(host='127.0.0.1',port=27017) #连接数据库
self.dbb = self.conn.cbaplayers #创建数据库
self.dbbcc = self.dbb.cbaplayer0 #创建集合
def process_item(self, item, spider):
item = dict(item)
self.dbbcc.insert(item)
return item