CoderCastrov logo
CoderCastrov
Питон

Парсинг результатов Tokopedia по названию магазина и отображение столбчатой диаграммы с помощью Matplotlib

Парсинг результатов Tokopedia по названию магазина и отображение столбчатой диаграммы с помощью Matplotlib
просмотров
2 мин чтение
#Питон
Table Of Content

    Фильтр парсинга данных для фильтрации данных, мы модифицировали его из предыдущей программы, добавив циклы и создав списки для хранения данных. Например, будут отображаться только название продукта, цена, исходная цена, скидка в процентах, URL изображения и рейтинг.

    Код программы ниже был изменен.

    import requests
    import pandas as pd
    
    url = 'https://gql.tokopedia.com/graphql/ShopProducts'
    
    header = {
       'authority': 'gql.tokopedia.com',
        'accept' : '*/*',
        'accept-language' : 'id-ID,id;q=0.9,en-US;q=0.8,en;q=0.7', 
        'content-type' : 'application/json',
        'cookie' : '_UUID_NONLOGIN_=dd17b3371931d9e275e78726df6468ff; _UUID_NONLOGIN_.sig=2cvtHXW6Xazuta_8DgjCD9ORnkM; DID=24ba785c0705aa4755072f450d096c77cd725d3b3062c4f316a53fef649e7070304995d0cf200190f5f58c48bba5916f; DID_JS=MjRiYTc4NWMwNzA1YWE0NzU1MDcyZjQ1MGQwOTZjNzdjZDcyNWQzYjMwNjJjNGYzMTZhNTNmZWY2NDllNzA3MDMwNDk5NWQwY2YyMDAxOTBmNWY1OGM0OGJiYTU5MTZm47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=; _gcl_au=1.1.1161513039.1671459848; _UUID_CAS_=c32a81e1-d251-4cb9-b747-3232c11b6b81; _CASE_=71286e436e283038383d3e26286b436e28303a2628666866283028406b616b787e6b2a5a7f796b7e28262869436e28303b3d3c26286665646d283028282628666b7e2830282826287a49652830282826287d436e28303b38383b3a393d3f262879436e28303b3b3f393a3f3d392628795e737a6f28302838622826287d6279283028517156287d6b786f62657f796f55636e5628303b38383b3a393d3f265628796f787c63696f557e737a6f56283056283862562826562855557e737a6f646b676f56283056285d6b786f62657f796f79562877267156287d6b786f62657f796f55636e5628303a265628796f787c63696f557e737a6f56283056283b3f67562826562855557e737a6f646b676f56283056285d6b786f62657f796f7956287757282628665f7a6e283028383a3838273b38273b335e383b30383e303a3d213a3d303a3a2877; __auc=5cf5d7411856d64bfe0d452b670; _fbp=fb.1.1672578050619.229902767; _abck=A4FAA692755A27636A885591CE32ACD9~0~YAAQh+wZuIMSjhSFAQAAel0TgAl/hkvPE7uCnL4xbT34dTCjAP/ppCFSTqNI0/UnFqGLyc9mKi7+iQo2fsl6K2XzKhhm80zyQajz+eQVzVY0YnLpsCIVRtRa/BuEBhPq0WLCbuPrC691xE0xuP4z2q/Nq98GXDQeDbZ5yeM3cdWwopoKw04btBS0dZ7oqFOCGjbR6X2i1eeNa6G9R++QXWf7zpjVXBWbcdjXRbgUAuy7i633i2oJHF95ni/YoLat4Sx5WPUTSlXJdjrmmz/pWO5j8ps8xNwuXJsKJvK27kZptUrmA5hmJ18+2Npd+/RxHSbwi3xVJYZ6NGCgpfdgdY7Wzjy1I4UAG9QKbHnDiJnVCYAHH5qEY70d9rz7MZs4Uwcu/ixpHKEO6vAIalgsFkJ34sngLv2Ycynb~-1~-1~-1; bm_sz=0C02AA77E66F43DFD0AA9B283B08848C~YAAQh+wZuIYSjhSFAQAAel0TgBIH+gpQ1r2q5jG1w9B6pSc2Ub4yKSptSkiZTTCvJo+nGEQPxkx5qZSmtwCatrw+E3ggwRgYVKfGC/UFDOODN+77Ne1b5Zp+UybT1EbejYZp2ZbHRNrYso7pU8k5+aHOycT+vG1Hx8jvp5F4ru7SahNKBCspNIgbAGA1b999PWvxNw6vWOUKg41AFXoEje5uUDXWG3VKlHCFH03t0roHQCPhZU8YM72XZUczR/wbMYVL1QBtyLKtYmmslY+VJbJ6z3jSlN/wOOLoQ1CbKoqkqR5sXks=~3556932~3491395; _gcl_aw=GCL.1672845984.Cj0KCQiA5NSdBhDfARIsALzs2ECMc9ldkd2gZz8M1EzEp6fO3UWyAEDTxjhyODPaqWp4fvefTYUjEccaAqJREALw_wcB; _gid=GA1.2.1125955342.1672845987; _gac_UA-126956641-6=1.1672845987.Cj0KCQiA5NSdBhDfARIsALzs2ECMc9ldkd2gZz8M1EzEp6fO3UWyAEDTxjhyODPaqWp4fvefTYUjEccaAqJREALw_wcB; _SID_Tokopedia_=TJHCmoYsM9QkOUctZHkH09JeMCEY53fklVYUuCM1O-5UvMpEmkToir6G4KM-wDcpxPKEe2_0Y8LTy_TR8_BUby-3ZD68rXpQwCb_cGM0A4jKtg6MhoN7BYs2PqTLRBGA; __asc=639dfd171857d641994829867fe; AMP_TOKEN=%24NOT_FOUND; _gac_UA-9801603-1=1.1672846038.Cj0KCQiA5NSdBhDfARIsALzs2ECMc9ldkd2gZz8M1EzEp6fO3UWyAEDTxjhyODPaqWp4fvefTYUjEccaAqJREALw_wcB; hfv_banner=true; bm_mi=B1231607238CC275F5F452D40F89A84F~YAAQnuwZuCPs9BaFAQAA0dwfgBJ8U9imW7Qd/9zRkBNlHAmeYA8k7a3R2grjYg/9fupVXH88/JhPRdzeK62e1JMDzbkkjvHtqGAlgRI6KVQanKGTR93MZkYco/y21E+e9vOZeE4hyk0QufGMrQuOGmZTAMdpKdTvQPaoiDrhO/7z5+NBAukJZZjH9/7B9I9049PpAMA/k0OKIryroOz57ylWNDUcQRhaOGNQQlk4luY3VPyjb/xm8rfA0V44uWRE6pngG2aCIppbpqYNmb+QYrtK/i2j8Xy6qO089iyR5VIOLgy/WRmt0T7CfGdguO83VBJHX3eM2J41XilLfQ==~1; _dc_gtm_UA-126956641-6=1; ak_bmsc=BDFF2CB1FC75AAD9829AC3690AC1F749~000000000000000000000000000000~YAAQh+wZuIlhjhSFAQAAANAzgBIjuQ2gAF89Tn9WMLhLTdl6+A7RJpKgZFmVFMuclGUaqXZf0QAHTHppJZ7HAZLAPoGI9YS0/cfF4Z35oWa3iC1pj3kFwzRNVWaJDzEZaG7W7I2XojAvdalgJ/+lKJVe0UDC7oaoUhfSR7InLkVlIS17hGE4YkaQeWYJjFrKaw8TwVgp7Td6T8H38ZI/m9njG6qs4BFkuDl4yVw6uyR/oKN5bCADuHUAweJXbxiaTTQjVhdvj9o0afjQLmAInislyw6luVhcJzVLrdvZYn9CrPg/PgZZ4ZsR1YyU2bDLDQi4HqVnKBak//tLtsR2lNwssytWx69c1pzpusGxMh+sQvyKUTsYJSQ0L/w5/ESHa1BlhqeiSryhC3EwFwKxWfXvRCKxIFGZKBCQj0DsYaIoAXOz3xj8wrVg0EFM/8QkiItAiuqgp9zoROBRZ4JjCY5nlQBXDz0ECW7DPPYzzZGuI9Y04PsjDF9dmg9uMnZlnKsq4IBff8i1LBnjrtq+cg==; _dc_gtm_UA-9801603-1=1; _ga_70947XW48P=GS1.1.1672845989.3.1.1672848106.57.0.0; _ga=GA1.1.2090096950.1671459850',
        'origin': 'https://www.tokopedia.com',
        'referer': 'https://www.tokopedia.com/iboxofficial' ,
        'sec-ch-ua': '"Not?A_Brand";v="8", "Chromium";v="108", "Google Chrome";v="108"',
        'sec-ch-ua-mobile': '?0',
        'sec-ch-ua-platform': '"Windows"',
        'sec-fetch-dest': 'empty',
        'sec-fetch-mode': 'cors',
        'sec-fetch-site': 'same-site',
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36',
        'x-device': 'default_v3',
        'x-source': 'tokopedia-lite',
        'x-tkpd-lite-service': 'zeus',
        'x-version': '505bf79',
    }
    
    query = f'[{{"operationName":"ShopProducts","variables":{{"sid":"12962687","page":1,"perPage":80,"etalaseId":"etalase","sort":1,"user_districtId":"2274","user_cityId":"176","user_lat":"","user_long":""}},"query":"query ShopProducts($sid: String\u0021, $page: Int, $perPage: Int, $keyword: String, $etalaseId: String, $sort: Int, $user_districtId: String, $user_cityId: String, $user_lat: String, $user_long: String) {{\\n  GetShopProduct(shopID: $sid, filter: {{page: $page, perPage: $perPage, fkeyword: $keyword, fmenu: $etalaseId, sort: $sort, user_districtId: $user_districtId, user_cityId: $user_cityId, user_lat: $user_lat, user_long: $user_long}}) {{\\n    status\\n    errors\\n    links {{\\n      prev\\n      next\\n      __typename\\n    }}\\n    data {{\\n      name\\n      product_url\\n      product_id\\n      price {{\\n        text_idr\\n        __typename\\n      }}\\n      primary_image {{\\n        original\\n        thumbnail\\n        resize300\\n        __typename\\n      }}\\n      flags {{\\n        isSold\\n        isPreorder\\n        isWholesale\\n        isWishlist\\n        __typename\\n      }}\\n      campaign {{\\n        discounted_percentage\\n        original_price_fmt\\n        start_date\\n        end_date\\n        __typename\\n      }}\\n      label {{\\n        color_hex\\n        content\\n        __typename\\n      }}\\n      label_groups {{\\n        position\\n        title\\n        type\\n        url\\n        __typename\\n      }}\\n      badge {{\\n        title\\n        image_url\\n        __typename\\n      }}\\n      stats {{\\n        reviewCount\\n        rating\\n        __typename\\n      }}\\n      category {{\\n        id\\n        __typename\\n      }}\\n      __typename\\n    }}\\n    __typename\\n  }}\\n}}\\n"}}]'
    response = requests.post(url, headers=header, data=query)
    products = response.json()[0]['data']['GetShopProduct']['data']
    print('mulai')
    hasil = []
    for q in products:
        namaProduk = q['name']
        hargaDiskon = q['price']['text_idr']
        hargaAsli = q['campaign']['original_price_fmt']
        diskon = q['campaign']['discounted_percentage']
        foto = q['primary_image']['original']
        rating = q['stats']['rating']
        hasil.append({
            'Название продукта': namaProduk,
            'Цена': hargaDiskon,
            'Исходная цена': hargaAsli,
            'Процент скидки': diskon+'%',
            'URL изображения': foto,
            'Рейтинг': rating
        })
    dtFrame = pd.DataFrame(hasil)
    dtFrame.to_csv('scrape_toko_F.csv', encoding='utf-8')
    print('Завершено.....')

    Результаты программы:

    Отображение столбчатой диаграммы с помощью Matplotlib. Сначала создайте новый файл с именем graph.py. Импортируйте библиотеку; если вы еще не установили ее, выполните следующую команду в терминале vscode, чтобы установить ее.

    pip install matplotlib
    **Установите вышеуказанные библиотеки.**

    Импортируйте библиотеку

    import pandas as pd
    import matplotlib.pyplot as plt

    Затем, используя библиотеку pandas, создайте переменную для чтения csv-файла. написав ниже.

    data = pd.read_csv('hasilCari_F.csv')

    Например, мы отображаем товары и их рейтинг, и будем использовать горизонтальное отображение столбцов.

    name = data['Название продукта']
    value = data['Рейтинг']
    plt.barh(name,value)
    plt.show()

    При запуске программы будет создана диаграмма, подобная приведенной ниже.

    Результат комбинированного кода. УДАЧИ!!

    import pandas as pd
    import matplotlib.pyplot as plt
    
    data = pd.read_csv('scrape_toko_F.csv')
    
    name = data['Название продукта']
    value = data['Рейтинг']
    plt.barh(name,value)
    plt.show()