@Banki00

Пагинация при парсинге авито на python?

Проблема с парсингом последующих страниц, в том варианте, до которого я допер, могу выдернуть только первую страницу, если использовать этот вариант pagination = soup.find('div', class_='pagination-root-2oCjZ'), то все вроде хорошо, выводится весь список страниц в html, но как их выдернуть я не понимаю... Сама страниц - https://www.avito.ru/murmanskaya_oblast/avtomobili...

import requests
from bs4 import BeautifulSoup

def get_pages_count(html):
    soup = BeautifulSoup(html, 'html.parser')
    pagination = soup.find('span', class_='pagination-item-1WyVp').findNext('span')['data-marker']
    if pagination:
       return int(pagination[-2])
    else:
        return 1



def parse():
    html = get_html(URL)
    if html.status_code == 200:
        cars = []
        pages_count = get_pages_count(html.text)
        for page in range(1, pages_count + 1):
            print(f'Парсинг старницы {page} из {pages_count}...')
            html = get_html(URL, params={"p": page})
            cars.extend(get_content(html.text))
        print(cars)
    else:
        print('Error')


parse()
  • Вопрос задан
  • 2328 просмотров
Пригласить эксперта
Ответы на вопрос 2
@Fee1in
Попробуйте добавить get_text() и убрать .findNext тогда получите номер последней страницы.
def get_pages_count(html):
    soup = BeautifulSoup(html, 'html.parser')
    pagination = soup.find('span', class_='pagination-item-1WyVp')
    if pagination:
       return int(pagination[-2].get_text())
    else:
        return 1
Ответ написан
Комментировать
@Banki00 Автор вопроса
В общем сделал таким способом

def get_pages_count(html):
    soup = BeautifulSoup(html, 'html.parser')
    pagination = soup.find('div', class_='pagination-root-2oCjZ')
    line = pagination.text
    p_count = int(line[-8])
    if p_count > 1:
        return p_count
    else:
        return 1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы