爬取虎扑NBA球员常规赛各项数据存储至MongoDB

论坛 期权论坛 脚本     
匿名技术用户   2020-12-22 10:36   26   0

平时喜欢看球赛,十几年的詹密,五一放假(表示五一十天假期)在家闲着没事爬爬本赛季NBA球员常规赛数据。虎扑还是比较友好,页面比较简单,使用requests库和正则表达式就可以完成爬取了,哈哈。

首先看看要爬取哪些数据

这里写图片描述

这里写图片描述

找到数据在哪些标签里面

这里写图片描述

查看一共收录了几页的球员数据

这里写图片描述

代码

#spider程序
import re
import requests
from requests.exceptions import RequestException
from config import *
import pymongo

client = pymongo.MongoClient(MONGO_URL)
db = client[MONGO_DB]

#获取页面上html代码
def get_one_page(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return response.text
        return None
    except RequestException:
        return None

#解析各球员的技术统计参数
def get_data_param(html):
    pattern = re.compile('<tr.*?bg_a">.*?width="46">(.*?)</td>.*?class="left">(.*?)</td>.*?'
                         'width="50">(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>.*?>'
                         '(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>.*?width="50">'
                         '(.*?)</td>.*?width="70">(.*?)</td>', re.S)
    items = re.findall(pattern,html)
    list = []
    for item in items:
        list.append(item[0])
        list.append(item[1])
        list.append(item[2])
        list.append(item[3])
        list.append(item[4])
        list.append(item[5])
        list.append(item[6])
        list.append(item[7])
        list.append(item[8])
        list.append(item[9])
        list.append(item[10])
        list.append(item[11])
    return list

#解析每一页上的数据
def parse_one_page(html,list):
    pattern = re.compile('<tr>.*?width="46">(.*?)</td>.*?html">(.*?)'
                         '</a>.*?width="50">.*?">(.*?)</a>.*?bg_b">(.*?)</td>'
                         '.*?>(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>'
                         '.*?>(.*?)</td>.*?>(.*?)</td>.*?>(.*?)</td>'
                         '.*?width="50">(.*?)</td>.*?width="70">(.*?)</td>.*?/tr>',re.S)
    items = re.findall(pattern,html)
    for item in items:
        data = {
            list[0]:item[0],
            list[1]:item[1],
            list[2]:item[2],
            list[3]:item[3],
            list[4]:item[4],
            list[5]:item[5],
            list[6]:item[6],
            list[7]:item[7],
            list[8]:item[8],
            list[9]:item[9],
            list[10]:item[10],
            list[11]:item[11]
        }
        save_to_mongoDB(data)

#保存到MongoDB
def save_to_mongoDB(data):
    try:
        if db[MONGO_TABLE].insert(data):
            print('存储到MongoDB成功',data)
    except Exception:
        print('存储到MongoDB失败',data)

def main():
    for offset in range(1,7):
        url = 'https://nba.hupu.com/stats/players/pts/'+str(offset)
        html = get_one_page(url)
        params = get_data_param(html)
        items = parse_one_page(html,params)

if __name__ == '__main__':
    main()
#MongoDB配置
MONGO_URL = 'localhost'
MONGO_DB = 'NBA'
MONGO_TABLE = 'data_statistics'

这里写图片描述

运行结果

这里写图片描述

这里写图片描述

注:学生党,代码写的不够优美,希望与大家一块交流学习。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP