[python3]nba球员数据爬虫

来源:互联网 发布:天下粮仓 知乎 编辑:程序博客网 时间:2024/04/30 07:19

爬取的数据为新浪nba数据库

方法是先爬取球员列表页面然后进入每个球员页面进行爬取,结果生成为csv

由于个人需求只爬取了16-17赛季数据,可通过修改正则表达式进行定制

代码如下:

import urllib.requestimport reimport csvmyUrl ="http://nba.sports.sina.com.cn/players.php?dpc=1"user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)' headers = { 'User-Agent' : user_agent } req = urllib.request.Request(myUrl, headers = headers) myResponse = urllib.request.urlopen(req)myPage = myResponse.read()          #encode的作用是将unicode编码转换成其他编码的字符串          #decode的作用是将其他编码的字符串转换成unicode编码  unicodePage = myPage.decode("GB2312")#print(unicodePage)myItems = re.findall(' <a href=\'(.*?)\'>(.*?)</a>',unicodePage,re.S)  items = []  for item in myItems:            # item 中第一个是url             # item 中第二个是球员姓名    try:        memUrl="http://nba.sports.sina.com.cn/"+item[0]        memName=item[1]        newReq=urllib.request.Request(memUrl, headers = headers)        newResponse = urllib.request.urlopen(newReq)        newPage = newResponse.read()        unicodeNewPage = newPage.decode("GB2312")        memItems = re.findall('<tr bgcolor="#FFEFB6".*?16-17.*?</a></td>(.*?)</tr>',unicodeNewPage,re.S)        j=[]       # print(memItem[0].)        j=re.findall("<td>(.*?)</td>",memItems[0],re.S)        with open("nba.csv","a",newline="") as datacsv:            csvwriter = csv.writer(datacsv,dialect = ("excel"))            #csv文件插入一行数据,把下面列表中的每一项放入一个单元格(可以用循环插入多行)            csvwriter.writerow([memName,j[0],j[1],j[2],j[3],j[4],j[5],j[6],j[7],j[8],j[9],j[10],j[11],j[12],j[13],j[14]])    except Exception as err:        print(err)        print(item[1])


0 0