Это может помочь вам в этом. Я реорганизовал поиск предметов в функцию, которая всегда возвращает диктат. Тогда достаточно просто вычислить «задания» для этой функции и вызвать их параллельно, используя multiprocessing
.
Вывод сценария достаточно многословный.
Поскольку я не ваши исходные файлы данных, это естественно dry -кодировано, поэтому могут быть ошибки.
import json
import multiprocessing
import sys
import traceback
from datetime import datetime
import pandas as pd
import requests
headers = {
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36",
"referer": "https://www.magazineluiza.com.br/",
}
def get_item_data(cep, sku, seller):
url = "https://www.magazineluiza.com.br/produto/calculo-frete/{}/{}/{}.json".format(
cep, sku, seller
)
data = {"Cep": cep, "Sku": sku, "Seller": seller, "Date": datetime.now()}
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
json_data = response.json()
data.update(
{
"City": json_data["address"]["city"],
"State": json_data["address"]["state"],
"ZipCode": json_data["address"]["zip_code"],
}
)
if json_data["delivery"]:
data.update(
{
"TipoEntrega": json_data["delivery"][0]["description"],
"Price": json_data["delivery"][0]["price"],
"Time": json_data["delivery"][0]["time"],
}
)
except Exception as exc:
print(cep, sku, seller, exc, file=sys.stderr)
data["Error"] = traceback.format_exc()
print(json.dumps(data))
return data
def main():
listaCEP = pd.read_csv(r"cep_1_por_estado.csv", dtype=str)
listaSKU = pd.read_csv(r"sku_seller.csv", dtype=str)
jobs = []
for index, a in listaCEP.iterrows():
for index, b in listaSKU.iterrows():
jobs.append((a.cep, b.sku, b.seller))
with multiprocessing.Pool() as p:
item_datas = p.starmap(get_item_data, jobs, chunksize=10)
export = pd.DataFrame(item_datas)
export.to_csv(r"consultaCeps.csv", index=False)
if __name__ == "__main__":
main()