Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 1, 2022 20:16:13

maytaR0
Зарегистрирован: 2022-04-01
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Не могу спарсить цену с площадки стим

Добрый день. Я решил спарсить цену первого идущего по списку предмета на тп стима по определенному запросу.
У меня получается спарсить теги div, но класс normal_price в теге span почему то нет
view-source:https://steamcommunity.com/market/search?q=AWP+Фобос
Вот ссылка на стандартный запрос, мне нужна цена первого идущего предмета

Прикреплённый файлы:
attachment Screenshot_2022-04-01-20-02-14-615_com.vkontakte.android.jpg (278,5 KБ)

Офлайн

#2 Апрель 1, 2022 23:20:15

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1309
Репутация: +  113  -
Профиль   Отправить e-mail  

Не могу спарсить цену с площадки стим

 import re
import requests
from bs4 import BeautifulSoup
#
def get_market_search_html(target):
    search_url = r'https://steamcommunity.com/market/search?q='
    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-Language': 'ru,en;q=0.9',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                      'AppleWebKit/537.36 (KHTML, like Gecko) '
                      'Chrome/98.0.4758.119 YaBrowser/22.3.0.2430 Yowser/2.5 Safari/537.36'
    }
    resp = requests.get(search_url + target.replace(' ','+'), headers=headers)
    if resp.status_code == 200:
        return resp.text
#
def get_match_list(soup:BeautifulSoup):
    out = []
    match0 = soup.find('div',id="searchResultsRows")
    if match0:
        match1 = match0.find_all('a')
        if match1:
            for m in match1:
                item_name = m.find('span', class_='market_listing_item_name')
                item_price = m.find(lambda tag: tag.name == 'span' and tag.get('class') == ['normal_price'])
                out.append((item_name.text if item_name else None, item_price.text if item_price else None))
            return out
#
def main():
    print('что ищем?')
    while True:
        target = input('>>>')
        if target == '0':# для выхода из цикла 0
            break
        html = get_market_search_html(target)
        if html:
            soup = BeautifulSoup(html, 'html.parser')
            res = get_match_list(soup)
            if res:
                for i in res:
                    print(i)
            else:
                print('math_list not found')
        else:
            print('html not received')
#
if __name__ == '__main__':
    main()

>>>
что ищем?
>>>awp фобос
('AWP | Фобос (Поношенное)', '$3.05 USD')
('AWP | Фобос (Немного поношенное)', '$1.23 USD')
('StatTrak™ AWP | Фобос (Поношенное)', '$6.11 USD')
('AWP | Фобос (После полевых испытаний)', '$1.17 USD')
('AWP | Фобос (Прямо с завода)', '$2.41 USD')
('StatTrak™ AWP | Фобос (Немного поношенное)', '$4.32 USD')
('StatTrak™ AWP | Фобос (Прямо с завода)', '$6.46 USD')
('StatTrak™ AWP | Фобос (После полевых испытаний)', '$3.83 USD')

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version