from bs4 import BeautifulSoup
import requests
html = requests.get("https://steamcommunity.com/market/listings/730/AK-47%20%7C%20Nightwish%20%28Minimal%20Wear%29")
soup = BeautifulSoup(html.text, "html.parser")
price = soup.find("div", id="market_commodity_buyrequests")
print(price)
<div id="market_commodity_buyrequests">
</div>
<div id="market_commodity_buyrequests">\r\n\t\t\t\t\t\t\t\t\t\t\t \r\n\t\t\t\t\t\t\t\t\t\t</div>
Сейчас далеко не 90е, и на большинстве страниц полно JS-скриптов. Они, в том числе, могут делать фоновые (без перезагрузки страницы) запросы по ходу работы сайта. Так, например, реализуется "бесконечная лента" - по достижению низа страницы делается фоновый запрос, и новый контент подставляется вниз.
Некоторые сайты на этом вообще целиком построены - отдают основным запросом только болванку, а содержимое туда подсовывают фоновыми запросами. Как следствие, то, что ты выкачиваешь через requests, и то, что увидит пользователь в браузере - две большие разницы.
Соответственно, тут нужно:
1. Идентифицировать, какие фоновые запросы делает сайт. Инструменты разработчика в браузере в помощь.
2. Определить, какие из этих запросов подгружают нужную тебе информацию, и в каком виде она представлена. Нередко там не HTML-разметка, а формат JSON, с которым куда проще работать.
3. Определить, что нужно для выполнения этих запросов: какие URL дёргать, какие параметры подставлять, и т.д.
4. Попробовать имитировать только эти запросы.
Успех зависит от сайта, многие пытаются защищаться от такого, кто во что горазд.
Альтернативный вариант - использовать безголовый браузер. Но там своя гора проблем: это куда более ресурсоёмко, нужно дождаться полной прогрузки сайта, API для поиска там тоже своё. Так что я бы переходил к этому варианту только если имитировать запросы самому не вышло.