Словарь нужно отредактировать так, чтобы выводились символы после знака $
Столкнулся с проблемой при парсинге вещей Staem: В графе с ценой так же присутствует и количество вещей, они в HTML коде названы одинаково, а именно:
<div class="market_commodity_order_summary" id="market_commodity_forsale">Лотов на продажу: <span class="market_commodity_orders_header_promote">94380</span><br>Начальная цена: <span class="market_commodity_orders_header_promote">$1.29</span></div>
Мне нужна только их цена, тоесть 4 символа после знака $, через атрибут .find выдается только первое значение, тоесть количество вещей. Думаю сделать поиск через цикл for, но не знаю как написать код, чтобы после знака $ он выводил ещё 4 символа. Мой код (воспользовался силениумом, так как без него, значения были пусты):
from bs4 import BeautifulSoup as bs
from selenium import webdriver
from selenium.webdriver.firefox.service import Service
import time
s = Service('C:\\Users\\Семен\\OneDrive\\Рабочий стол\\Python\\Parser\\geckodriver.exe')
def get_data(url):
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'Accept-Encoding': 'gzip, deflate, br',
'Accept-Language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36'
}
r = requests.get(url=url, headers=headers)
with open('index.html', 'w', encoding="utf-8") as file:
file.write(r.text)
def get_data_s(url):
options = webdriver.FirefoxOptions()
options.set_preference('general.useragent.override', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36')
#try:
# driver = webdriver.Firefox(
# options = options
# )
# driver.get(url=url)
# time.sleep(2)
#
# with open('index_s.html', 'w', encoding="utf-8") as file:
# file.write(driver.page_source)
#except Exception as ex:
# print(ex)
#finally:
# driver.close()
# driver.quit()
with open('index_s.html', encoding="utf-8") as file:
src = file.read()
soup = bs(src, 'lxml')
info = soup.find_all('div', class_="market_listing_iteminfo")
names = []
for name in info:
names.append(
{
'Название: ': name.find('h1', class_='hover_item_name').text,
'Цена покупки: ': name.findNext('div', class_='market_commodity_order_summary', ).text
}
)
print(names)
def main():
# get_data('https://steamcommunity.com/market/listings/730/Dreams%20%26%20Nightmares%20Case')
get_data_s('https://steamcommunity.com/market/listings/730/Dreams%20%26%20Nightmares%20Case')
if __name__ == '__main__':
main()```
Ответы (2 шт):
Вы можете воспользоваться .split() вот в этой строке:
'Цена покупки: ': price = name.findNext('div', class_='market_commodity_order_summary', ).text.split('$')
А после вывести данные с помощью среза
print(price[7:])
В итоге, если у вас входные данные формата Цена: $%Ваша цена$
То вы сможете получить именно то, что вам нужно, вот пример кода:
price = 'Цена: $2.0'
print(price.split('$')[7:])
print(price[7:])
Input: Цена: $2.0
Output: 2.0
'Цена покупки: ': name.findAll('span', class_='market_commodity_orders_header_promote')[1].text.replace('$','')