from urllib2 import urlopen, Request, HTTPError
Здесь вы импортируете из библиотеки urllib2, что означает, что вы не ссылаетесь на urllib2 при вызове одного из импортированных вами модулей.Таким образом, вместо:
request = urllib2.Request(site, headers=headers)
Было бы просто:
request = Request(site, headers=headers)
Чтобы еще больше сверлить этот дом, потому что я тоже был смущен этим, вы уже делаете то же самоевещь с импорта из bs4 BeautifulSoup.Обратите внимание, что вы не вызываете bs4.BeautifulSoup, а просто BeautifulSoup.
page = urllib2.urlopen(req)
Вы делаете это снова здесь, и вы также передаете 'req' вместо объекта 'request', который вы только что сделали.
И, наконец, если вы исправили этовы, вероятно, не получаете вывод из-за этой строки:
temp = soup.find('div', attrs={'class': 'h2'})
Вы запрашиваете div с классом 'h2'.h2 сам по себе является HTML-элементом, а не атрибутом класса, если только это не очень прикольный веб-сайт.
Удачи в вашем проекте!