@Sanchoys228

Как спарсить цену скина в Steam?

Привет всем, прошу помочь мне с вопросом парсинга.
Мне нужно через bs4 вытащить цену и название скина.
5f1dad3e495b9879436873.png

from colorama import init
init()
from colorama import Fore, Back, Style
from bs4 import BeautifulSoup
import requests

gun_name1 = 'M4A4'
skin_name1 = 'Безлюдный космос'
wear_name1 = 'После полевых испытаний'
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36 OPR/68.0.3618.197'}
steam_link = ('https://steamcommunity.com/market/search?appid=730&q=' + gun_name1 +'|' + skin_name1 + '%28' + wear_name1 + '%29')
full_page = requests.get(steam_link, headers=headers)
soup = BeautifulSoup(full_page.content, 'html.parser')
skin_desc = soup.findAll('span', {'class':'market_listing_item_name'})
print(Back.CYAN + '{0:*^60}'.format('steamcommunity.com'))
print(Back.RESET + skin_desc[1].text)

При данном коде выдает ошибку:

*********************steamcommunity.com*********************
Traceback (most recent call last):
File "beta_marketChecker.py", line 95, in
print(Back.RESET + skin_desc[1].text)
IndexError: list index out of range

Вот сам html со стима:
<span id="result_0_name" class="market_listing_item_name" style="color: #D2D2D2;">M4A4 | Безлюдный космос (Поношенное)</span>


P.S Суть ошибки я понимаю, но как пофиксить не знаю.В python я новичок
  • Вопрос задан
  • 969 просмотров
Решения вопроса 1
hottabxp
@hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..
Обязательно нужно в заголовках передавать Accept и Accept-Language(конкретно в данном случае), так как без этих заголовков блок с товарами не возвращается:
spoiler
5f1db55c8aa7d080819128.png

Вот рабочий код, правда без колорамы, думаю разберетесь:
from bs4 import BeautifulSoup
import requests

gun_name1 = 'M4A4'
skin_name1 = 'Безлюдный космос'
wear_name1 = 'После полевых испытаний'
headers = {

    'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36',
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'Accept-Language': 'ru-UA,ru;q=0.9,en-US;q=0.8,en;q=0.7,ru-RU;q=0.6',
}
steam_link = ('https://steamcommunity.com/market/search?appid=730&q=' + gun_name1 +'|' + skin_name1 + '%28' + wear_name1 + '%29')
full_page = requests.get(steam_link, headers=headers)
soup = BeautifulSoup(full_page.content, 'html.parser')

skins = soup.find_all('a',class_='market_listing_row_link')

for skin in skins:
	name = skin.find('span',class_='market_listing_item_name').text
	counts = skin.find('span',class_='market_listing_num_listings_qty').text
	price = skin.find('span',class_='sale_price').text.replace('От','').strip() #HACK


	print(f'{name}: {counts} - {price}')

Результат

M4A4 | Безлюдный космос (После полевых испытаний): 461 - $11.48 USD
StatTrak™ M4A4 | Безлюдный космос (После полевых испытаний): 44 - $32.53 USD
M4A4 | Азимов (После полевых испытаний): 52 - $117.83 USD
M4A4 | Зірка (После полевых испытаний): 172 - $11.86 USD
M4A4 | Рентген (После полевых испытаний): 82 - $10.78 USD
M4A4 | Грифон (После полевых испытаний): 264 - $5.10 USD
M4A4 | Магний (После полевых испытаний): 6,243 - $0.28 USD
M4A4 | Преобразователь (После полевых испытаний): 434 - $2.01 USD
M4A4 | Смерч (После полевых испытаний): 154 - $1.90 USD
M4A4 | Неонуар (После полевых испытаний): 206 - $18.22 USD


Только обратите внимание, там к скинам несколько цен - цена продажи, обычная цена и т.д. Я в стиме не понимаю.
И на будущее, всегда проверяйте ответ, который вы получаете в результате запроса. Только не статус-код(200,404 и т.д.), а сохраняйте ответ в файл и смотрите содержимое в блокноте или в браузере. Пример:
with open('index.html','w') as file:
	file.write(full_page.text)

Данный код запишет в файл index.html ответ на ваш запрос.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
samodum
@samodum
Какой вопрос - такой и ответ
Посмотри сколько элементов возвращается в skin_desc.
Ругается, что их меньше двух.
Там либо один элемент, тогда надо писать skin_desc[0]
Либо там ничего нет. Тогда надо разбираться почему ничего не попало в выборку
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы