Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 21

Снова парсер wildberries

12.11.2022, 15:31. Показов 2532. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import requests
import xlsxwriter
from time import sleep
 
 
def fetch(url, params):
    for count in range(1, 17):
        sleep(2)
        headers = params['headers']
        body = params['body']
        if params['method'] == 'GET':
            return requests.get(url, headers=headers)
        elif params['method'] == 'POST':
            return requests.post(url, headers=headers, data=body)
        psr = fetch(f"https://catalog.wb.ru/sellers/catalog?appType=1&couponsGeo=3,21&curr=rub&dest=-1216601,-103906,-331414,-331412&emp=0&lang=ru&locale=ru&page={count}&pricemarginCoeff=1.0&reg=1&regions=82,69,68,86,30,48,1,22,66&sort=popular&spp=33&sppFixGeo=4&supplier=45944", {
          "headers": {
            "accept": "*/*",
            "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
            "sec-ch-ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"",
            "sec-ch-ua-mobile": "?0",
            "sec-ch-ua-platform": "\"Windows\"",
            "sec-fetch-dest": "empty",
            "sec-fetch-mode": "cors",
            "sec-fetch-site": "cross-site",
            "Referer": "https://www.wildberries.ru/seller/45944?sort=popular&page=1",
            "Referrer-Policy": "no-referrer-when-downgrade"
          },
          "body": None,
          "method": "GET"
        })
 
        things = psr.json()['data']['products']
        for thing in things:
            art = thing['id']
            skidka = thing['sale']
            return art, skidka
 
def writer_1(parametr):
    book = xlsxwriter.Workbook(r'Рабочий стол')
    page = book.add_worksheet('товар')
 
    row = 0
    column = 0
 
    page.set_column('A:A', 20)
    page.set_column('B:B', 20)
    for item in parametr():
        page.write(row, column, item[0])
        page.write(row, column + 1, item[1])
        row += 1
 
    book.close()
 
writer_1(fetch)
Выдаёт ошибку:
Traceback (most recent call last):
File "C:\Users\1\PycharmProjects\jogel_parser \main.py", line 54, in <module>
writer_1(fetch)
File "C:\Users\1\PycharmProjects\jogel_parser \main.py", line 47, in writer_1
for item in parametr():
TypeError: fetch() missing 2 required positional arguments: 'url' and 'params'

Не могу сообразить где я потерял url и params. Что надо изменить, чтобы заработало?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.11.2022, 15:31
Ответы с готовыми решениями:

Парсер Wildberries
Добрый день! У меня есть пару ключевых слов по которым нужно сделать поиск в Wildberries и вытянуть название, артикул товаров первой...

И снова парсер арифметических выражений
Здравствуйте! Возникла проблема, как добавить функционал понимания функций в парсер строки. То есть, я понимаю как сделать парсер для...

Снова хром, снова сапопроизвольно открывается, снова bkrfdf.xyz и казино
Здравствуйте! Собственно, проблема уже не новая, хотя, как показывают сообщения форума, за последние дни выскочившая у многих. Через...

11
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
12.11.2022, 16:19
Цитата Сообщение от Jim_Hawkins Посмотреть сообщение
writer_1(fetch)
Тут
0
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 21
12.11.2022, 16:32  [ТС]
Цитата Сообщение от Lekks Посмотреть сообщение
Тут
А что именно туда надо прописать?
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
12.11.2022, 16:45
Ваша fetch - это функция, которая ждет при вызове два параметра - url и params. Подумайте, что вы делаете в строке writer_1(fetch).

А еще - то ли что то с отступами не то у вас, то ли это слишком для меня сложная рекурсия )) Ну и цикл в конце fetch тоже странно выглядит.
0
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 21
13.11.2022, 02:48  [ТС]
Переписал так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import requests
import xlsxwriter
from time import sleep
 
def fetch(url, params):
    sleep(2)
    headers = params['headers']
    body = params['body']
    if params['method'] == 'GET':
            return requests.get(url, headers=headers)
    elif params['method'] == 'POST':
            return requests.post(url, headers=headers, data=body)
 
def jogel():
    for count in range(1, 17):
        psr = fetch(f"https://catalog.wb.ru/sellers/catalog?appType=1&couponsGeo=3,21&curr=rub&dest=-1216601,-103906,-331414,-331412&emp=0&lang=ru&locale=ru&page={count}&pricemarginCoeff=1.0&reg=1&regions=82,69,68,86,30,48,1,22,66&sort=popular&spp=33&sppFixGeo=4&supplier=45944", {
          "headers": {
            "accept": "*/*",
            "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
            "sec-ch-ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"",
            "sec-ch-ua-mobile": "?0",
            "sec-ch-ua-platform": "\"Windows\"",
            "sec-fetch-dest": "empty",
            "sec-fetch-mode": "cors",
            "sec-fetch-site": "cross-site",
            "Referer": f"https://www.wildberries.ru/seller/45944?sort=popular&page={count}",
            "Referrer-Policy": "no-referrer-when-downgrade"
          },
          "body": None,
          "method": "GET"
        })
        things = psr.json()['data']['products']
        for thing in things:
            art = thing['id']
            skidka = thing['sale']
            return art, skidka
 
 
 
print(jogel())
функция возвращает только первые два требуемых значения (из 99 на одной странице) + не делает перебора по страницам через range... Подскажите, пожалуйста, где ошибка?
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
13.11.2022, 07:35
У вас return на первом же шаге второго цикла. Как думаете, что происходит?
0
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 21
13.11.2022, 11:57  [ТС]
Цитата Сообщение от Lekks Посмотреть сообщение
У вас return на первом же шаге второго цикла. Как думаете, что происходит?
Думаю, что функция должна возвращать по 99 значений (которые в things) с каждой из 16 страниц (которые в range), иначе бы я не писал сюда. Пробуя сдвинуть return руками, ничего не меняется, те же 2 значения (только рандомные)
0
148 / 111 / 37
Регистрация: 28.11.2013
Сообщений: 383
13.11.2022, 13:15
Вам надо создать список и заполнять его в цикле, в конце возвратить заполненный список.
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import requests
# import xlsxwriter
from time import sleep
 
def fetch(url, params):
    sleep(2)
    headers = params['headers']
    body = params['body']
    if params['method'] == 'GET':
        return requests.get(url, headers=headers)
    elif params['method'] == 'POST':
        return requests.post(url, headers=headers, data=body)
 
 
def jogel():
    current_data_list = []
    # for count in range(1, 17):
    for count in range(1, 2):
        psr = fetch(
            f"https://catalog.wb.ru/sellers/catalog?appType=1&couponsGeo=3,21&curr=rub&dest=-1216601,-103906,-331414,-331412&emp=0&lang=ru&locale=ru&page={count}&pricemarginCoeff=1.0&reg=1&regions=82,69,68,86,30,48,1,22,66&sort=popular&spp=33&sppFixGeo=4&supplier=45944",
            {
                "headers": {
                    "accept": "*/*",
                    "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
                    "sec-ch-ua": "\"Google Chrome\";v=\"107\", \"Chromium\";v=\"107\", \"Not=A?Brand\";v=\"24\"",
                    "sec-ch-ua-mobile": "?0",
                    "sec-ch-ua-platform": "\"Windows\"",
                    "sec-fetch-dest": "empty",
                    "sec-fetch-mode": "cors",
                    "sec-fetch-site": "cross-site",
                    "Referer": f"https://www.wildberries.ru/seller/45944?sort=popular&page={count}",
                    "Referrer-Policy": "no-referrer-when-downgrade"
                },
                "body": None,
                "method": "GET"
            })
        things = psr.json()['data']['products']
        for thing in things:
            art = thing['id']
            skidka = thing['sale']
            current_data_list.append(
                {
                    "art": art,
                    "skidka": skidka
                }
            )
    return current_data_list
 
 
data_list_result = []
data_list_result = jogel()
 
print(data_list_result)
1
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 21
13.11.2022, 13:20  [ТС]
Цитата Сообщение от Skryp Посмотреть сообщение
Вам надо создать список и заполнять его в цикле, в конце возвратить заполненный список.
Спасибо за интересную идею! Вечером попробую
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
13.11.2022, 15:41
Цитата Сообщение от Jim_Hawkins Посмотреть сообщение
Думаю, что функция должна возвращать по 99 значений (которые в things) с каждой из 16 страниц (которые в range), иначе бы я не писал сюда.
Есть ощущение, что вам надо подтянуть основы python. Оператор return прекращает выполнение функции, возвращая указанное значение.
0
0 / 0 / 0
Регистрация: 26.10.2022
Сообщений: 21
13.11.2022, 20:29  [ТС]
Цитата Сообщение от Lekks Посмотреть сообщение
Оператор return прекращает выполнение функции, возвращая указанное значение.
Пробовал с оператором yield, совсем не пошло Основы, да. Повторять и учить. Плаваю, как видите, очень сильно. Но тут поезд впереди рельсов у меня...
0
243 / 178 / 73
Регистрация: 17.10.2018
Сообщений: 749
13.11.2022, 21:16
Цитата Сообщение от Jim_Hawkins Посмотреть сообщение
Пробовал с оператором yield
yield тут вообще не при делах. Выше один из способов рекомендовали - и в принципе верно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
13.11.2022, 21:16
Помогаю со студенческими работами здесь

Парсинг Wildberries
import requests from bs4 import BeautifulSoup import xlsxwriter from time import sleep headers = { 'user-agent':...

1c подключение по api к suppliers.wildberries.ru
Токен = &quot;xxxxxx&quot;; Заголовки=новый Соответствие(); Заголовки.Вставить(&quot;X-Auth-Token&quot;,Токен); ...

Баннер на одном сайте (wildberries)
Добрый день! Вчера появился такой баннер на сайте интернет магазина wildberries. В первый раз кликнул по нему, подумав что от магазина,...

карточка товара как на wildberries
Всем привет. Помогите разобраться, плиз. На wildberries вся карточка кликабельная, так как закована в тэг a. Но внутри карточки есть 2...

API Wildberries получение стикеров
Добрый день, уважаемые форумчане! Столкнулся со следующей проблемой. Не удается извлечь pdf-стикеры по товарам из личного кабинета...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru