После использования DevTools
в Firefox
/ Chrome
я создал этот код.
Страница использует другой URL, отправляет разные данные, получает результат с разными ключами.
Вы бы необходимо использовать DevTools
, чтобы наблюдать больше запросов от браузера к серверу, чтобы узнать, как использовать больше параметров в data
import requests
query = "mobile"
data = {
# "facets":[{
# "name":"OEM",
# "value":"GE%20Healthcare"
# }],
"facets":[],
"facilityId": 38451,
"id_ins": "a2a3d332-73a7-4194-ad87-fe7412388916",
"limit": 15,
"query": query,
"referer": "/catalog/Service",
"start": 0,
# "urlParams":[{
# "name": "OEM",
# "value": "GE Healthcare"
# }],
"urlParams":[]
}
r = requests.post('https://prodasf-vip.partsfinder.com/Orion/CatalogService/api/v1/search', json=data)
data = r.json()
#print(data['products'])
#print(data['products'][0])
#print(data['products'][0]['options'])
#print(data['products'][0]['options'][0])
print(data['products'][0]['options'][0]['price'])
EDIT (2020.09.01)
Если у вас есть запросы manu, используйте for
-l oop, чтобы многократно запускать один и тот же код, но с другим запросом. И когда вы получите данные для одного запроса, используйте for
-l oop, чтобы получить все цены из data['products']
EDIT (2020.09.06)
Я добавил переменные start
и limit
в get_data()
, а позже я запустил их в l oop for start in range(0, limit*10, limit)
, чтобы получить 10 страниц (каждая со 100 элементами)
import requests
# import pprint # to format data on screen `pprint.pprint()
# --- fucntions ---
def get_data(query, start=0, limit=15): # <-- new (2020.09.06)
"""Get data from server"""
payload = {
# "facets":[{
# "name":"OEM",
# "value":"GE%20Healthcare"
# }],
"facets":[],
"facilityId": 38451,
"id_ins": "a2a3d332-73a7-4194-ad87-fe7412388916",
"limit": limit, # <-- new (2020.09.06)
"query": query,
"referer": "/catalog/Service",
"start": start, # <-- new (2020.09.06)
# "urlParams":[{
# "name": "OEM",
# "value": "GE Healthcare"
# }],
"urlParams":[]
}
r = requests.post('https://prodasf-vip.partsfinder.com/Orion/CatalogService/api/v1/search', json=payload)
data = r.json()
return data
def show_data(data):
#print(data['products'])
#print(data['products'][0])
#print(data['products'][0]['options'])
#print(data['products'][0]['options'][0])
print(data['products'][0]['options'][0]['price'])
for item in data['products']:
#pprint.pprint(item)
print('title:', item['title'])
if not item['options']:
print('price: unknown')
else:
for option in item['options']:
print('price:', option['price'], '| vendor item number:', option['vendorItemNumber'])
print('---')
def filter_data(data):
filtered = []
for item in data['products']:
if not item['options']:
filtered.append( [] ) # unknown
else:
all_prices = [option['price'] for option in item['options']]
filtered.append( all_prices )
return filtered
# --- main ---
all_queries = ["mobile", 'GE Healthcare']
limit = 100 # <-- new (2020.09.06)
for query in all_queries:
# pagination
for start in range(0, limit*10, limit): # <-- new (2020.09.06)
print('\n--- QUERY:', query, 'start:', start, '---\n')
data = get_data(query, start, limit)
#show_data(data)
filtered = filter_data(data)
print(filtered)