diff --git a/nba_data/migrations/0015_alter_playershotchartdata_time_remaining.py b/nba_data/migrations/0015_alter_playershotchartdata_time_remaining.py
new file mode 100644
index 0000000..9c0f2bf
--- /dev/null
+++ b/nba_data/migrations/0015_alter_playershotchartdata_time_remaining.py
@@ -0,0 +1,18 @@
+# Generated by Django 4.2 on 2023-05-10 02:34
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('nba_data', '0014_playershotchartdata'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='playershotchartdata',
+ name='time_remaining',
+ field=models.CharField(default='', max_length=12),
+ ),
+ ]
diff --git a/nba_data/models.py b/nba_data/models.py
index 517ce73..efc4d94 100644
--- a/nba_data/models.py
+++ b/nba_data/models.py
@@ -216,7 +216,7 @@ class PlayerShotChartData(models.Model):
left = models.IntegerField(null=True)
date = models.CharField(max_length=255, default='')
qtr = models.CharField(max_length=6, default='')
- time_remaining = models.IntegerField(null=True)
+ time_remaining = models.CharField(max_length=12, default='')
result = models.BooleanField(null=True)
shot_type = models.CharField(max_length=6, default='')
distance_ft = models.IntegerField(null=True)
diff --git a/nba_data/nba_scraper_shot_chart.py b/nba_data/nba_scraper_shot_chart.py
new file mode 100644
index 0000000..2341a57
--- /dev/null
+++ b/nba_data/nba_scraper_shot_chart.py
@@ -0,0 +1,27 @@
+import requests
+from bs4 import BeautifulSoup, Comment
+
+url = 'https://www.basketball-reference.com/players/j/jamesle01/shooting/2016'
+
+response = requests.get(url)
+soup = BeautifulSoup(response.text, "html.parser")
+
+# Find the comment containing the shot chart
+comment = soup.find(string=lambda text: isinstance(text, Comment) and "div_shot-chart" in text)
+
+if comment: # Make sure we've found the comment before we try to parse it
+ shot_chart_soup = BeautifulSoup(comment, "html.parser")
+
+ # Now you can find the shot chart in the parsed comment
+ shot_chart = shot_chart_soup.find("div", {"id": "div_shot-chart"})
+
+ if shot_chart: # Check that we've found the shot chart
+ shots = shot_chart.find_all("div")
+
+ for shot in shots:
+ print(shot)
+
+ else:
+ print('Shot chart not found')
+else:
+ print('Comment not found')
diff --git a/nba_data/test.html b/nba_data/test.html
new file mode 100644
index 0000000..ea7247e
--- /dev/null
+++ b/nba_data/test.html
@@ -0,0 +1,3715 @@
+
+
+
+
+
+
+
+
+
+
+
+
+

+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
●
+
●
+
×
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
×
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
●
+
×
+
●
+
×
+
×
+
●
+
×
+
×
+
●
+
×
+
●
+
●
+
●
+
×
+
×
+
×
+
●
+
×
+
×
+
●
+
●
+
●
+
●
+
●
+
●
+
×
+
×
+
●
+
×
+
●
+
×
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
×
+
●
+
●
+
×
+
●
+
●
+
×
+
×
+
×
+
×
+
+
+
+
+
+
+
\ No newline at end of file