Парсинг сайта new-science.ru с BeautifulSoup: пошаговое руководство для начинающих

    Если вы осваиваете парсинг веб-страниц на Python, библиотека BeautifulSoup (bs4) - один из лучших инструментов для старта. В этой статье мы на практическом примере разберём, как спарсить результаты поиска с сайта new-science.ru. Вы узнаете, как анализировать HTML-код, извлекать заголовки статей и ссылки, а также обрабатывать пагинацию. Код проекта доступен на GitHub по ссылке: github.com/AlexGame2012/habr.git.

    Подготовка к парсингу: инструменты и библиотеки

    Для работы вам понадобится Python 3, а также установленные библиотеки requests и beautifulsoup4. Установите их через pip:

    pip install requests beautifulsoup4

    Также рекомендуется использовать lxml в качестве парсера - он быстрее и стабильнее стандартного html.parser. Установите его командой:

    pip install lxml

    Анализ структуры страницы new-science.ru

    Перед написанием кода важно изучить HTML-код страницы с результатами поиска. Откройте в браузере ссылку: https://new-science.ru/?s=глобальное+потепление и нажмите F12 (Инструменты разработчика). Обратите внимание на контейнеры, в которых находятся статьи. Обычно это элементы article или div с определёнными классами. В случае new-science.ru каждая статья обёрнута в <article class="post-card">. Внутри находятся заголовок <h2 class="entry-title"> и ссылка <a href="...">.

    Написание парсера на BeautifulSoup

    Создайте файл parser.py и импортируйте необходимые модули:

    import requests
    from bs4 import BeautifulSoup

    Отправьте GET-запрос к странице поиска:

    url = 'https://new-science.ru/?s=глобальное+потепление'
    response = requests.get(url)
    soup = BeautifulSoup(response.text, 'lxml')

    Теперь найдите все карточки статей и извлеките из них данные:

    articles = soup.find_all('article', class_='post-card')
    for article in articles:
        title_tag = article.find('h2', class_='entry-title').find('a')
        title = title_tag.text.strip()
        link = title_tag['href']
        print(f'{title}: {link}')

    Этот код выведет список заголовков и ссылок на статьи из первой страницы поиска.

    Обработка пагинации: парсинг всех страниц

    Чтобы собрать данные со всех страниц результатов, нужно найти кнопку «Далее» или определить параметр пагинации в URL. На new-science.ru пагинация реализована через параметр page. Например, вторая страница: https://new-science.ru/page/2/?s=глобальное+потепление. Напишите цикл, который перебирает страницы, пока не достигнет последней:

    page = 1
    while True:
        url = f'https://new-science.ru/page/{page}/?s=глобальное+потепление'
        response = requests.get(url)
        if response.status_code != 200:
            break
        soup = BeautifulSoup(response.text, 'lxml')
        articles = soup.find_all('article', class_='post-card')
        if not articles:
            break
        for article in articles:
            # извлечение данных
            pass
        page += 1

    Не забудьте добавить задержку между запросами (time.sleep(1)), чтобы не перегружать сервер.

    Сохранение результатов в файл

    Для удобства сохраните спарсенные данные в CSV или JSON. Пример сохранения в CSV с помощью модуля csv:

    import csv
    
    with open('articles.csv', 'w', newline='', encoding='utf-8') as f:
        writer = csv.writer(f)
        writer.writerow(['Title', 'Link'])
        for title, link in data:
            writer.writerow([title, link])

    Теперь у вас есть структурированный файл, который можно использовать для дальнейшего анализа.

    Типичные ошибки и их решение

    • Ошибка 403 (Forbidden): сайт блокирует автоматические запросы. Добавьте заголовок User-Agent в запрос: headers = {'User-Agent': 'Mozilla/5.0'}.
    • Пустой результат: проверьте, не изменилась ли структура HTML. Используйте print(soup.prettify()) для отладки.
    • Бесконечный цикл пагинации: всегда проверяйте, есть ли на странице статьи, и устанавливайте лимит страниц.

    Заключение

    Парсинг new-science.ru с BeautifulSoup - отличная практика для новичков. Вы научились анализировать HTML, извлекать данные и обрабатывать пагинацию. Исходный код проекта вы найдёте на GitHub. Экспериментируйте, добавляйте новые поля (дату, автора) и адаптируйте парсер под другие сайты.

    Часто задаваемые вопросы