It looks like this data is being loaded through an ajax call:

Instead, you should target this URL: http://www.teamrankings.com/ajax/league/v3/stats_controller.php
import requests import urllib from bs4 import BeautifulSoup params = { "type":"team-detail", "league":"ncb", "stat_id":"3083", "season_id":"312", "cat_type":"2", "view":"stats_v1", "is_previous":"0", "date":"04/06/2015" } content = urllib.request.urlopen("http://www.teamrankings.com/ajax/league/v3/stats_controller.php",data=urllib.parse.urlencode(params).encode('utf8')).read() soup = BeautifulSoup(content) table = soup.find("table", attrs={'class':'sortable'}) data = [] rows = table.findAll("tr") for tr in rows: cols = tr.findAll("td") for td in cols: text = ''.join(td.find(text=True)) data.append(text) print(data)
Using your web inspector, you can also view the parameters that are passed along with the POST request.

Typically, the server at the other end checks these values ββand rejects your request if you do not have some or all of them. The above code snippet went fine for me. I switched to urllib2 because I usually prefer to use this library.
If the data is loaded in your browser, you can clear it. You just need to emulate the request sent by your browser.
source share