Untitled
plain_text
a month ago
1.8 kB
1
Indexable
Never
import requests import re import csv import pydantic from pydantic import BaseModel class Item(BaseModel): highBuyout: bool nmId: int qnt: int class Items(BaseModel): orders: list[Item] class parseWB: def __init__(self, url: str): self.nm_id = self.get__nm_id(url) return self.nm_id @staticmethod def __get_item_id(url:str): regex = "(?<=catalog/).+(?=/deta)" item_id = re.search(regex, url)[0] return item_id def get__nm_id(self, url): response = requests.get( url=f"https://product-order-qnt.wildberries.ru/v2/by-nm/?nm={self.__get_item_id(url=url)}") data = response.json() data = {"orders": data} # Преобразование списка в словарь nm_id = Items(**data) return nm_id.orders[0].nmId def parse(self): self.__create_csv() while True: response = requests.get('https://product-order-qnt.wildberries.ru/v2/by-nm/?nm={self.get__nm_id}') items_info = Items.model_validate(response.json()) if not items_info.orders: break self.__save_csv(items_info) def __create_csv(self): with open ("data.csv", mode = "w", newline="") as file: writer = csv.writer(file) writer.writerow(['nmId','qnt']) def __save_csv(self, items): with open("data.csv", mode="a", newline="") as file: writer = csv.writer(file) for product in items.orders: writer.writerow([orders.nmId, orders.qnt]) if __name__ == "__main__": parseWB("https://www.wildberries.ru/catalog/148420357/detail.aspx").parse()