If you have a look on the page source, you see that the id in question (expanded_standings_overall)
<div class="placeholder"></div>
<!--
<div class="table_outer_container">
<div class="overthrow table_container" id="div_expanded_standings_overall">
<table class="sortable stats_table" id="expanded_standings_overall" data-cols-to-freeze=2>
<caption>MLB Detailed Standings</caption>
... sweet data here ..
</table>
</div>
</div>
-->
</div>
The HTML comments seems to be a trick to hide the content to our innocent scraper ;)
It is interesting that Firebug don't show this comments ...?
One approach to overcome the issue is to extract the comments, remove them and proceed with the data in the comments. For instance:
$ scrapy shell www.baseball-reference.com/leagues/MLB/2016-standings.shtml
>>> view(response)
>>> from scrapy.selector import Selector
>>> sel = Selector(response)
>>> sel.xpath('//table[@id="expanded_standings_overall"]')
[]
>>> import re
>>> regex = re.compile(r'<!--(.*)-->', re.DOTALL)
>>> for comment in sel.xpath('//comment()').re(regex):
>>> table = Selector(text=comment).xpath('//table[@id="expanded_standings_overall"]')
>>> print(table)
...
[]
[]
[<Selector xpath='//table[@id="expanded_standings_overall"]' data='<table class="sortable stats_table" id="'>]
[]
[]
As you see I prefer XPATH selectors over CSS, but they are in principle the same, see https://doc.scrapy.org/en/latest/topics/selectors.html.