• Как конвертировать список с ценами в Float или любой формат с которым можно проводить математические операции!?

    @PavelMos
    Ты пытаешься использовать прикладные модули питона, не овладев достаточно основами языка.
    data = json.loads(data_str)
    #получается список списков из форматированной строки. 
    #Этот список списков вероятно надо загрузить в Pandas,  в таблицу.
    result = '\n'.join(map(str, data)) # 
    #join берёт список и объединяет его в строку с символом или строкой разделителем.  
    #И еще и map http://pythonicway.com/python-functinal-programming. 
    # Результат не имеет смысла для твоей задачи.
    f_res = '[Date, Amount]\n' + result #Как бы верно, если для таблицы в виде списка 
    #списков надо добавить заголовки, то можно к заголовкам присоединить  саму таблицу . 
    #Но здесь  не имеет смысла.  Cам заголовок в виде строки, а не списка из элементов, 
    #в таблице не 2, а 3 столбца, и самой таблицы в виде #списка списков уже нет - 
    #преобразована обратно в строку
    f_res1 = re.findall(r', *.*,', f_res) # непонятно что нужно найти. См. про регекспы, удобно тренироваться на #regext101.com
    f_res1_1 = ' '.join(f_res1[0:30])
    f_res2 = f_res1_1.replace(',', ' ') # тут код имеет смысл,  если предположить, что в f_res1 есть 
    #список найденных результатов и от него берётся первые 30 элементов 
    #(надо заранее проверять, есть ли в нём столько, или предусмотреть обработку ошибки).  
    f_res3 = {'price': f_res2} # допустим создаётся словарь ключ price, значение - длинная строка
    f_res4 = pd.DataFrame(f_res3, index=[0])# создать датафрейм из словаря это pd.DataFrame.from_records(...


    Можно сделать как в предыдущем вопросе
    https://qna.habr.com/q/1195350
    import pandas as pd
    req = requests.get('https://steamcommunity.com/market/listings/730/Glove%20Case')
    search = re.search('var line1=(.+);', req.text)
    data_str = search.group(1)
    data1 = json.loads(data_str) #получем с помощью json или через split список строк, 
    #который будет преобразован в 3 колонки
    data2 = [i.replace('"', '').split(',') for i in data] # обработать строки  - 
    #убрать лишние двойные кавычки, разбить каждую строку на 3 элемента
    df1 = pandas.DataFrame.from_records(data=data2, columns=['c1','c2','c3']) #загрузить, назвать колонки
    df1.dtypes()#проверить, какие типы получились при импорте, и привести колонки к нужным типам
    df1['c1'] = df1.apply(lambda x: x[1].replace(' +',''), axis=1)  #убрать из строки с датой лишние символы, 
    #но это можно было бы сделать и на каком-то из предыдущих шагов с помощью регекспа или replace
    df1['c1'] = pandas.to_datetime(df1['c1']) #преобразовать в тип datetime
    df1['c2'] = pandas.to_numeric(df1['c2']) #преобразовать в число,  пандас должен понять, что будет float
    df1['c3'] = pandas.to_numeric(df1['c3']) # преобразовать в число, паднас должен понять, что будет int


    а можно было до загрузки пройтись по списку и удалить одинарные кавычки и 2 и 3 колонки и возможно тогда бы пандас сразу их проимпортировать как float и int например так
    data3 = [(i[0].replace(' +', ''), i[1], int(i[2])) for i in data2]

    и тогда осталось бы только преобразовать в дату первую колонку датафрейма
    Ответ написан
    2 комментария
  • Как парсить истории продаж скина в стим?

    @PavelMos
    Там есть вообще все значения в т.ч. за более ранние периоды.
    Я сделал так
    req1=request...
    soup1=bs(req1.content, 'html.parser')
    result1=re.findall(re.compile(r'line1=(.*)]];'), str(soup1) ) [0] #у меня получился result1=список из одного элемента
    list1=result1.split('],[')
    out1
    Out[133]: 
    ['[["Dec 09 2015 01: +0",7.989,"44"',
     '"Dec 10 2015 01: +0",5.743,"66"',
     '"Dec 11 2015 01: +0",5.277,"73"',
     '"Dec 12 2015 01: +0",5.262,"89"',
     '"Dec 13 2015 01: +0",4.953,"66"',
     '"Dec 14 2015 01: +0",4.65,"80"',
     '"Dec 15 2015 01: +0",6.189,"67"',
     '"Dec 16 2015 01: +0",4.673,"53"',
     '"Dec 17 2015 01: +0",4.55,"44"',
     '"Dec 18 2015 01: +0",4.458,"53"',
     '"Dec 19 2015 01: +0",4.419,"61"',
    .....
     '"Aug 30 2022 07: +0",1.709,"2"',
     '"Aug 30 2022 09: +0",1.67,"1"',
     '"Aug 30 2022 10: +0",0.203,"1"',
     '"Aug 30 2022 12: +0",1.748,"1"',
     '"Aug 30 2022 13: +0",1.75,"2"',
     '"Aug 30 2022 14: +0",1.708,"2"',
     '"Aug 30 2022 18: +0",1.1,"2"',
     '"Aug 30 2022 20: +0",1.776,"1"',
     '"Aug 30 2022 21: +0",1.745,"2"',
     '"Aug 30 2022 22: +0",1.61,"1"',
     '"Aug 30 2022 23: +0",1.847,"1"',
     '"Aug 31 2022 02: +0",1.63,"1"',
     '"Aug 31 2022 03: +0",1.82,"2"',
     '"Aug 31 2022 04: +0",1.58,"1"',
     '"Aug 31 2022 06: +0",1.58,"1"',
     '"Aug 31 2022 10: +0",1.24,"1"',
     '"Aug 31 2022 11: +0",1.897,"1"',
     '"Aug 31 2022 13: +0",1.58,"1"',
     '"Aug 31 2022 14: +0",1.854,"2"',
     '"Aug 31 2022 15: +0",1.41,"1"']
    len(out1)
    Out[134]: 2816
    Ответ написан
    1 комментарий
  • Как парсить истории продаж скина в стим?

    nnnLik
    @nnnLik
    Capybara god
    Привет!

    Я нашел свой старый парсер предметов в стиме:

    import json
    import re
    import requests
    
    
    req = requests.get('https://steamcommunity.com/market/listings/730/Glove%20Case')
    search = re.search('var line1=(.+);', req.text)
    data_str = search.group(1)
    data = json.loads(data_str)
    result = '\n'.join(map(str, data))
    f_res = '[Date, Price, Amount]\n' + result
    
    print(f_res)
    Ответ написан
    2 комментария