Парсинг результатов Tokopedia по названию магазина и отображение столбчатой диаграммы с помощью Matplotlib
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()