В этой статье мы рассмотрим создание парсера страниц на Python, и сделаем это абсолютно с нуля, будет очень интересно. Также вы сможете скачать файлы программы ниже.
Ещё посмотрите статью «Основы создания Telegram бота на Python», таким образом вы сможете сделать Telegram bot и внедрить в него парсер, что иногда может быть удобно.
Установка компонентов:
Для начала нужно скачать необходимые компоненты, для работы с этим, нам понадобится библиотека Requests, для получения HTML страницы, и Beautiful Soup, для обработки и получения нужного элемента в странице.
Но перед этим рекомендую создать виртуальное окружение, для этого посмотрите статью: «Создание Virtual Environments Python».
Когда вы сделали окружение, введите в терминал эти две команды для установки:
1 2 | pip install requests pip install beautifulsoup4 |
Таким образом вы устанавливаете библиотеки, если они вас заинтересовали, то ссылки на них можете найти в низу.
Создание парсера на Python:
Теперь перейдём к разработки парсера, тут будет два примера, первый простой, просто получим страницу и запишем в файл, а второй уже сделаем список статей из сайта, в качестве примера будем использовать сайт stopgame.ru.
Первый пример:
Первый пример очень простой, и очень короткий, вот он:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | import requests # Импортируем библиотек Requests # Основная функция def main(): # URL страницы url = 'https://stopgame.ru/' # Получаем страницу r = requests.get(url) # Открываем файл with open('test.html', 'w', encoding='utf-8') as output_file: # Выводим страницу в HTML файл output_file.write(r.text) # Запуск кода if __name__ == '__main__': main() |
В этом файле мы первым делом подключили библиотеку Requests, потом создали функцию в которой будет вся логика программы.
Внутри функции мы создали переменную с адресом страницы и получили её, сделали это с помощью requests.get()
, которая соответственно получает данные страницы, там cookce и т.д, но нам нужен только текст.
Последнее мы открываем файл «text.html», и записываем в него весь HTML который получили, запускаем программы, открываем файл и вот что получается:
Вот такой на Python парсер страниц получился, как видите мы получили весь документ, единственное мы не получили стили, поэтому всё так выглядит, их надо отдельно парсить.
Второй пример:
Второй пример уже не много более сложный и там мы уже будем использовать библиотеку Beautiful Soup, вот код:
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 | import requests # Импорт библиотеки Requests from bs4 import BeautifulSoup # Импорт библиотеки Beautiful Soup # Основная функция def main(): # URL страницы url = 'https://stopgame.ru/news/all/p1' # Получаем страницу r = requests.get(url) # Открываем файл with open('test.html', 'w', encoding='utf-8') as output_file: # Добавляем страницу для парсинга soup = BeautifulSoup(r.text, 'html.parser') # Получаем все по селектору элементы и проходима по ним циклам for i in soup.select(".items > .article-summary > .article-description"): # Получаем заголовок title = i.select(".caption > a[href]") # Добавляем заголовок во файл output_file.writelines("<h2>" + title[0].text + "</h2>") # Запуск кода if __name__ == '__main__': main() |
Тут в начале всё точно также как и в первом пример, только добавляем Beautiful Soup, потом до открытия файла опять же делаем всё как в первом примере.
Когда открыли файл, начинаем парсить страницу с помощью Beautiful Soup, и создаём цикл, где по селектору выбираем нужные элементы страницы, это делается благодаря методу select()
и проходимся по ним циклам.
Внутри цикла же опять по селектору выбираем заголовок и добавляем его в качестве строки в файл, запускаем программу и смотрим файл.
Как видите парсер на Python с нуля работает, для этого вам нужно знать только метод select()
, для библиотеки Beautiful Soup, ну и селекторы CSS, вот и всё.
Также для более качественного вывода в HTML, например виде таблицы, рекомендую использовать библиотеку LXML.
Вывод:
В этой статье вы прочитали как происходит создание парсера страниц на Python с нуля, тут было только самое важное что стоит сказать, также вот ссылки на библиотеки Requests и Beautiful Soup.