Scrapy框架 + MySQL入库。
所有2019届新秀球员的基本信息以及体测数据全部入库。
开发环境
- python3.7
- Scrapy框架及其组件
- json模块
- pymysql模块
获取分析:
1.获取每位球员的个人ID及个人信息页面链接。
通过抓包发现目的信息数据是通过Ajax技术异步加载得到,解析网页,找到所需的数据。找到这个json格式里面的数据正好是我们所需要的,里面还包含有每位球员的姓名以及个人ID。
通过整合个人ID,能完整地得到每位球员的个人信息页面链接。
#获取个人基本信息:
jsondata = response.text
data = json.loads(jsondata)['data']
for player in data:
firstName = player['firstName']
playerid = player['id']
lastName = player['lastName']
allname = lastName+" "+firstName
college = player['college']
position = player['position']
infoid = player['shieldId']
playerurl = "https://www.nfl.com/prospects/johnathan-abram?id={}".format(infoid)
yield scrapy.Request(url=playerurl,callback=self.parseurl,meta={'allname':allname,'playerid':playerid,'college':college,'position':position,'infoid':infoid})
...
通过查看源码发现,球员个人页面为静态页面,数据直接解析就能获取,并不困难。
最后将所获取到的基本信息以及个人页面的体测数据通过pipelines组件存入MySQL数据库,以便做必要的数据分析。
pipelines入库操作:
def open_spider(self,spider):
self.conn = pymysql.connect(host='localhost',user='root',password='xxxxxx',database='xxxxxx',port=3306)
self.post = self.conn.cursor()
def process_item(self, item, spider):
sql = """
insert into combine2019(id,球员名字,球员id,球员大学,位置,球员信息id,身高,体重,arms,hands,40码,benchpress,垂直跳高,跳远,conedrill3,shuttle20,shuttle60) value(null,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
"""
items = dict(item)
self.post.execute(sql, (items['allname'], items['playerid'], items['college'],... items['yards40'], items['benchpress'], items['verticaljump']... )
self.conn.commit()
return item
def close_spider(self,spider):
self.conn.close()
结果展示:
(总共337名新秀球员的信息已全部录入完成)