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

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

首先看看要爬取哪些数据

爬取虎扑NBA球员常规赛各项数据存储至MongoDB_第1张图片

爬取虎扑NBA球员常规赛各项数据存储至MongoDB_第2张图片

找到数据在哪些标签里面

爬取虎扑NBA球员常规赛各项数据存储至MongoDB_第3张图片

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

爬取虎扑NBA球员常规赛各项数据存储至MongoDB_第4张图片

代码

#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('.*?width="46">(.*?).*?class="left">(.*?).*?'
                         'width="50">(.*?).*?>(.*?).*?>(.*?).*?>(.*?).*?>'
                         '(.*?).*?>(.*?).*?>(.*?).*?>(.*?).*?width="50">'
                         '(.*?).*?width="70">(.*?)', 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('.*?width="46">(.*?).*?html">(.*?)'
                         '.*?width="50">.*?">(.*?).*?bg_b">(.*?)'
                         '.*?>(.*?).*?>(.*?).*?>(.*?)'
                         '.*?>(.*?).*?>(.*?).*?>(.*?)'
                         '.*?width="50">(.*?).*?width="70">(.*?).*?/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'

爬取虎扑NBA球员常规赛各项数据存储至MongoDB_第5张图片

运行结果

爬取虎扑NBA球员常规赛各项数据存储至MongoDB_第6张图片

爬取虎扑NBA球员常规赛各项数据存储至MongoDB_第7张图片

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

你可能感兴趣的:(Python,爬虫,数据库,mongodb,数据存储,正则表达式,数据)