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

Господа при парсинге не переходит на страницы

02.05.2022, 13:15. Показов 978. Ответов 2

Студворк — интернет-сервис помощи студентам
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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import requests
from bs4 import BeautifulSoup
import csv
 
 
user = input('')
 
URL = f'https://monastirev.ru/search?term={user}'
HEADERS = {
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36 Edg/84.0.522.52',
    'accept': '*/*',
}
 
FILE_XLSX = 'Выгрузка Монастырев.csv'
 
 
def get_html(url, params=None):
    r = requests.get(url, headers=HEADERS, params=params)
    return r
 
 
def get_page_count(html):
    soup = BeautifulSoup(html, 'lxml')
    pagination = soup.find_all('li', class_='pagination__button')
    if pagination:
        return int(pagination[-1].get_text(strip=True))
    else:
        return 1
 
 
def get_content(html):
    soup = BeautifulSoup(html, 'lxml')
    items = soup.select('div.offer.js-assortment-unit-show')
 
    tabl = []
    for item in items:
        price_full = item.find_all('div', class_='offer__price-block')
        if price_full:
            price_full = item.find('div', class_='offer__price-current')
        elif price_full:
            price_full = item.find('div', class_='offer__price-unavailable')
        else:
            price_full = item.find('div', class_='offer__historycal-date')
            ################################################
        price_sail = item.find_all('div', class_='offer__price-block')
        if price_sail:
            price_sail = item.find_all('div', class_='offer__price-current')[1]
        else:
            price_sail = item.find_all('div', class_='offer__price-unavailable')[1]
 
 
 
        print(price_full)  # проверка ЦЕНЫ
        print(price_sail)  # проверка ЦЕНЫ
 
        tabl.append({
            'title': item.find('div', class_='offer__title link__text').get_text(strip=True),
            'content': item.find(class_='offer__description').get_text(strip=True),
            'price_full': price_full,
            'price_sale': price_sail,
        })
 
    return tabl
 
 
def save_file_exel(items, path):
    with open(path, 'w', newline='', encoding='utf-8-sig') as file:
        writer = csv.writer(file, delimiter=';')
        writer.writerow(['Название', 'описание', 'Цена', 'скидка за ожидание'])
        for item in items:
            writer.writerow([item['title'], item['content'], item['price_full'], item['price_sale']])
 
 
def pars():
    html = get_html(URL)
    if html.status_code == 200:
        tabl = []
        page_count = get_page_count(html.text)
        for page in range(1, page_count + 1):
            print(f'Загрузка страницы {page} из {page_count}...')
            html = get_html(URL, params={'page': page})
            tabl.extend(get_content(html.text))
        save_file_exel(tabl, FILE_XLSX)
        print('Выгрузка ГОТОВА')
    else:
        print('Нет связи с магазином')
 
 
pars()
Code
1
2
    price_sail = item.find_all('div', class_='offer__price-current')[1]
IndexError: list index out of range

Убираю [индекс] все работает но парсить начинает по первому классу

вот конкретный сайт на который ссылаю парсер [url]https://monastirev.ru/search?term=ибупрофен
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.05.2022, 13:15
Ответы с готовыми решениями:

Кракозябры при парсинге страницы
Получаю код страницы. С помощью регулярок извлекаю значение тэга заголовка страницы(<title>). Но в treeView выдаёт пустые строки....

Проблемы при парсинге статьи. Удаляются некоторые данные при сохранении полученной страницы
Здравствуйте. Наткнулся на интересную защиту от парсинга. Получаю страницу с помощью WebBrowser или CefSharp. Таким образом JS...

Ошибка при парсинге страницы сайта
В методе онклик пишу: public void onClick(View v) { Document doc = null; try { doc =...

2
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
02.05.2022, 16:54
Цитата Сообщение от KolenBg Посмотреть сообщение
IndexError: list index out of range
значит, там нет элемента с индексом 1, в списке только один элемент - вот оно и падает

Добавлено через 3 минуты
на всякий случай, sail - это ходить под парусом, то, что Вы ищите - это, скорее всего, sale.

Добавлено через 15 минут
Цитата Сообщение от Jabbson Посмотреть сообщение
значит, там нет элемента с индексом 1, в списке только один элемент - вот оно и падает
Такое произойдет, например, тогда, когда "Максимальная скидка доступна уже сегодня" - будет только один элемент с классом "offer__price-current".
0
0 / 0 / 0
Регистрация: 30.04.2022
Сообщений: 6
04.05.2022, 11:15  [ТС]
да действительно try: exept: решил эту проблему )))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.05.2022, 11:15
Помогаю со студенческими работами здесь

Запуск скрипта при парсинге страницы
Есть некоторый сайт с таблицей, которую необходимо пропарсить и записать данные в бд. Таблица состоит из записей и страниц, первая...

Избавление от &_shy_; при парсинге страницы
Доброго времени суток. Пытаюсь спарсить страницу вот таким вот кодом WebClient wClient = new WebClient(); wClient.Encoding =...

Слетела кодировка при парсинге html-страницы
Здравствуйте! Начал писать программу которая парсит сайт. В заголовке html-страницы указана следующая кодировка: <meta...

Неверное регулярное выражение при парсинге страницы
Имеется страница такой разметки: <tr class="lutr"> 15 26 37 48 </tr> <tr class="lutr"> 1 ...

При парсинге получается не весь код страницы
Обучаюсь парсингу и заметил такую странность что в странице которую я получаю отсутствует часть кода. <div...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru