3 горизонтальные линии, бургер
3 горизонтальные линии, бургер
3 горизонтальные линии, бургер
3 горизонтальные линии, бургер

3 горизонтальные линии, бургер
Удалить все
ЗАГРУЗКА ...

Содержание




    Введение/Про парсер

    В этой статье я приведу пример самого простого парсера на питоне. Объясню как он работает, как устроен, как использовать и как подогнать под себя. Данный парсер идеально подойдёт для любого статического сайта. Плюс как бонус, покажу как можно написать точно такой же парсер, но без использования внешних библиотек.
    Статический сайт - это сайт, который состоит из заранее созданных файлов (HTML, CSS и JavaScript). Все страницы хранятся на сервере в готовом виде. Текст и картинки на таком сайте одинаковы для всех посетителей, а сервер не собирает страницы заново при каждом заходе.
    Так как, разрешения парсить чужие сайты я пока не получил, решил показать на примере своего. Будем парсить "страницу о сайте", а именно ссылки.

    Создание парсера

    Настраиваем и подготавливаем виртуальное окружение

    Начнём пожалуй с установки необходимых пакетов и их импорта. Конечно, можно обойтись и без библиотек вообще. Но это долго и требует гораздо больше кода и контроля. Лучше не изобретать колесо и использовать готовые решения. Нам потребуются всего 3 пакета:
    1. requests - Для отправки запросов на целевой сайт и получение веб-страниц
    2. beautifulsoup4 - Для самого скрейпинга. Нахождение необходимых элементов и извлечение от туда необходимые данные
    3. lxml - beautifulsop4 сам по себе не может работать с html или xml файлами, поэтому ему нужна помощь в виде, такой вот библиотеки
    Дальше создаём директорию для проекта, добавляем виртуальное окружение, устанавливаем вышеперечисленные пакеты и создаём основной файл скрипта:
    mkdir MyScraper; python -m venv ./MyScraper/venv; source ./MyScraper/venv/bin/activate; pip install BeautifulSoup4 lxml requests; touch ./MyScraper/main.py;
    Для Linux/Unix(Bash) систем
    New-Item -ItemType Directory -Path "MyScraper" -Force python -m venv ./MyScraper/venv ./MyScraper/venv/Scripts/Activate.ps1 pip install BeautifulSoup4 lxml requests New-Item -ItemType File -Path "./MyScraper/main.py" -Force
    Для Windows(PowerShell) систем
    База и виртуальное окружение готово, теперь можно непосредственно перейти к самому скрипту - main.py

    Создание парсера на python

    Я люблю начинать делать парсеры с импорта всех его зависимостей/библиотек, определением констант/целевых адресов сайта и создании базовой структуры из функций.
    # Зависимости import requests from bs4 import BeautifulSoup # Целевая страница URL="https://timthewebmaster.com/ru/about-website/" # Здесь будет парсер def run(): pass # Точка входа/запуска скрипта if __name__ == "__main__": run()
    В самый конец файла добавь точку входа программы. Данная строчка говорит о том, что при запуске данного файла через интерпретатор python, она выполнит основную функцию run.
    Дальше нам потребуется функция самого скрапинга. Непосредственно в нем мы и указываем, при помощи чего парсим, как парсим и что парсим. Создаётся суп ...
    Суп(soup) - это такой стандарт названия того что возвращает BeautifulSoup конструктор. Так принято, но ты волен сам выбирать как это назвать.
    В этом "супе" мы находим все ссылки и извлекаем из их данные, сохранённые в href атрибуте. Создаётся список, который потом можно будет использовать как угодно, например для обхода новонайденных страниц. Давай же обличим все эти буковы в код:
    def run(): # Делаем запрос response = requests(URL) # После сохраняем весь исходный код страницы page = response.text # Создаём суп (такая древовидная структура используемая BS4 soup = BeautifulSoup(page, "lxml") # Находим все ссылки soup_links = soup.find_all('a') links = [] # И после извлечения необходимых данных сохраняем их for soup_link in soup_links: links.append(soup_link['href'])
    Всё вместе это будет выглядеть вот так:
    # Зависимости import requests from bs4 import BeautifulSoup # Целевая страница URL="https://timthewebmaster.com/ru/about-website/" # Здесь будет парсер def run(): # Делаем запрос response = requests(URL) # После сохраняем весь исходный код страницы page = response.text # Создаём суп (такая древовидная структура используемая BS4 soup = BeautifulSoup(page, "lxml") # Находим все ссылки soup_links = soup.find_all('a') links = [] # И после извлечения необходимых данных сохраняем их for soup_link in soup_links: links.append(soup_link['href']) # Точка входа/запуска скрипта if __name__ == "__main__": run()
    Это для тех, кто просто хочет всё скопировать
    Вот так вот выглядит самый простой парсер статических сайтов и страниц. Результат работы парсера должен выглядеть как-то так:
    Я ещё понадобавлял функции print в скрипте чтобы было видно процесс, а так скрипт один и тот же.
    Но если у сайта будет маломальская защита в виде ограничения по количеству или скорости отправляемых запросов, или блокировки по IP, или если данный сайт динамический - данный парсер не сработает. В таком случае придётся писать специальные парсеры динамических сайтов - о них я писал в отдельной статье.

    Парсер на python без зависимостей (опционально)

    Данная глава является аналогом предыдущей главы, с той лишь разницей, что я не буду использовать никакие внешние зависимости и использовать только встроенные инструменты python. И, чтобы повторить функционал предыдущего парсера, нам потребуется реализовать следующие замены:
    1. Библиотека requests - делать запросы и получать исходники страниц
    2. Библиотека beautifulsoup4 - парсить необходимые данные
    Наш шаблонный скрипт будет выглядеть вот так (это ещё без логики запросов и парсинга данных):
    from urllib.request import urlopen, Request from html.parser import HTMLParser URL="https://timthewebmaster.com/ru/about-website/" def run(): pass if __name__ == "__main__": run()
    Я сделал импорт некоторых функций и классов из стандартной библиотеки. Так, из библиотеки urllib мне нужна функция urlopen и класс Request, а из библиотеки html мне нужен шаблонный парсер HTMLParser.
    Можно капнуть ещё глубже и написать собственные модули обработки и отправки запросов и парсинга сырого текста. Это будет на C, но давай не будем копать так глубоко и остановимся на уровне Python.
    Это на самом деле всё что нам нужно и мы готовы написать обновлённый парсер:
    from urllib.request import urlopen, Request from html.parser import HTMLParser URL="https://timthewebmaster.com/ru/about-website/" class SimpleHTMLParser(HTMLParser): def handle_starttag(self, tag, attrs): if tag == "a": for attr in attrs: if attr[0] == "href": print(f"link->{attr[1]}") def run(): # Создаём запрос request = Request(URL, method="GET") # Отправляем запрос и открываем его, сохраняем with urlopen(request) as response: page = str(response.read()) parser = SimpleHTMLParser() parser.feed(page) if __name__ == "__main__": run()
    Функция urlopen работает так же как и обычный open для файлов, то есть создаёт специальный контекстный менеджер который можно потом использовать. Кстати, можно и не создавать объект request, класса Request, а просто отправить ссылку, но так мне кажется будет более наглядно, что мы делаем.
    После того как был получен ответ, мы его сохраняем как строку и передаём кастомному парсеру SimpleHTMLParser. Который в свою очередь обрабатывает полученную страницу так, как мы его настроили. По мне вышло даже проще в сравнении с использованием внешних библиотек.

    Заключение

    Данные парсеры очень просты в своём исполнении, и идеально подойдут для парсинга любых статических сайтов, с учётом того, что их ещё нужно подогнать под свои задачи для конкретного сайта.
    Хоть и 2й парсер и кажется проще в написании, по крайней мере мне, я рекомендую использовать именно первый вариант. Он будет быстрее и надёжнее ведь если взять тот же lxml парсер, он написан на С, и им занимались довольно долго, а значит и ошибок почти не должно быть.
    Но в любом случае надеюсь данная статья была тебе полезна.

    Не забудь поделиться, лайкнуть и оставить комментарий)

    Комментарии

    (0)

    captcha
    Отправить
    ЗАГРУЗКА ...
    Сейчас тут пусто. Буть первым (o゚v゚)ノ

    Другое

    Похожие статьи


    Как сделать парсер страниц с wildberries(или интернет-магазина) на python

    Часы
    16.11.2024
    /
    Часы
    12.09.2026
    Глазик
    6043
    Сердечки
    0
    Соединённые точки
    2
    Соединённые точки
    0
    Соединённые точки
    0
    Как написать парсер страниц с wildberries или любого интернет магазина с обходом блокировок при помощи прокси и их ротацией, используя Selenium и некоторые самолично сделанные инструменты. Всё это на примере …

    Как написать python-парсер кинопоиска (списка фильмов)

    Часы
    24.11.2024
    /
    Часы
    12.09.2026
    Глазик
    1375
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Про то как написать парсер списка фильмов с кинопоиска на python. Что для этого тебе потребуется и поделюсь исходным кодом с файлами данного парсера на питоне. С возможностью собрать и …

    Собственный парсер поисковой выдачи гугл

    Часы
    15.02.2025
    /
    Часы
    12.09.2026
    Глазик
    3217
    Сердечки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Соединённые точки
    0
    Как сделать процесс парсинга google быстрым и бесплатным. Про написание собственного парсера на Python и его настройку через Google API