Untitled

mail@pastecode.io avatar
unknown
plain_text
9 months ago
1.7 kB
21
Indexable
Never
import requests
import re
import csv
import pydantic
from pydantic import BaseModel


class Item(BaseModel):
    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):
        respose = requests.get(url=f"https://product-order-qnt.wildberries.ru/v2/by-nm/?nm={self.__get_item_id(url=url)}")
        nm_id = Items.model_validate(respose.json())
        return nm_id.orders[0].nmId



    def parse(self):
        params = {
            'nm': '148420357',
        }
        self.__create_csv()
        while True:
             response = requests.get('https://product-order-qnt.wildberries.ru/v2/by-nm/', params=params)
             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()