CoderCastrov logo
CoderCastrov
Парсер

Парсинг веб-страниц с использованием BeautifulSoup и Requests

Парсинг веб-страниц с использованием BeautifulSoup и Requests
просмотров
5 мин чтение
#Парсер

Привет, в этой практической работе мы напишем простой скрипт для парсинга веб-страниц с использованием python и модулей BeautifulSoup и Requests.

Без лишних слов, готовьте свои редакторы кода, а еще прежде чем мы продолжим, мы будем загружать наш код в наши репозитории на Github, все это будет делаться вручную из нашего локального репозитория (Git) на наших локальных машинах. (Если вы не знаете, как создать локальный репозиторий, вы можете посмотреть эту статью, чтобы узнать, как это делается. Кроме того, если вы не знаете, как загружать файлы на Github из Git, ознакомьтесь с этой статьей). Теперь давайте начнем.

Зачем мы парсим веб-сайты?

"Мы просто парсим веб-сайты, чтобы получить полезную информацию или данные для разных целей."

Частое парсинг вредно!

"Не забывайте, что слишком частый парсинг может быть дорогим для веб-сайта, с которого вы получаете данные, потому что слишком много запросов будет отправлено на этот сервер в данный момент."

Теперь, когда у вас есть представление о том, что такое парсинг и почему его не следует делать слишком часто, давайте перейдем к созданию парсера сами!

Для этого парсера мы просто будем проверять доступность веб-сайта, то есть проверять, работает ли сайт или он недоступен в данный момент.

  • Давайте выполним следующие команды. Чтобы использовать соответствующие модули, вам нужно установить их на вашем локальном компьютере через терминал. Для этой практической работы мы будем использовать Linux-машину ("pip3" для Linux и Mac. "pip" для Windows):
pip3 install requests
pip3 install bs4
  • Теперь, когда ваши модули установлены на локальном компьютере, давайте воспользуемся ими при написании кода. Сначала напишите следующие строки кода в вашем редакторе кода:
import requests
from bs4 import BeautifulSoup

С помощью этих строк кода мы импортировали необходимые модули для использования в программе.

  • Давайте определим функцию с именем "web_scraper":
def web_scraper(insert_url):
    page = requests.get(insert_url)

В коде выше мы определили функцию и создали параметр "insert_url". Переменная "page" хранит необработанные данные веб-сайта после выполнения запроса и (код веб-страницы в формате HTML).

  • Для следующего шага нам нужно создать переменную "soup", в которой мы будем хранить разобранный контент веб-сайта, полученный с помощью модуля "requests". Мы просто делаем это, написав следующий код:
soup = BeautifulSoup(page.content, 'html.parser')
  • Теперь мы разобрали или проанализировали HTML-контент. Чтобы спарсить конкретный контент, который нам нужен со страницы, нам нужно использовать тег HTML с сайта. Пример: (Ниже приведена простая страница Nginx, размещенная на 127.0.0.1 или localhost. Эта страница отображается, когда в браузере вводится localhost после запуска Nginx в терминале. Когда Nginx останавливается, страница не может быть отображена.)
Page content
  • Чтобы увидеть содержимое заголовка, нам нужно использовать тег "h1", заключенный в функцию "find()". Для этого мы пишем следующий код:
result = soup.find('h1')
print(result.text)

Выражение "print(result.text)" отображает содержимое внутри тега заголовка. Содержимое внутри этого тега заголовка выглядит примерно так:

Добро пожаловать в Nginx, Joseph!
  • Теперь, когда мы это сделали, давайте проверим доступность сайта, проверив код состояния сайта. Мы делаем это, написав следующий код:
print(page.status_code)

Следующий код отображает код состояния URL, переданного внутрь функции "web_scraper" в качестве аргумента при вызове. Результат должен выглядеть примерно так:

200

Значение выше - это код состояния, что означает, что сайт с указанным URL работает и функционирует.

  • Теперь давайте создадим условие "if", которое будет отображать сообщение об ошибке, когда код состояния не равен "200". Просто напишите следующий код:
if page.status_code != 200:
     print('Чрезвычайная ситуация! Проблема с сайтом')
else:
    print('Сайт работает в настоящее время...')

С помощью приведенного выше оператора мы создали условие, которое будет отображать сообщение "чрезвычайная ситуация", когда код состояния не равен "200".

Теперь бывают случаи, когда код состояния сайта может быть "200", но сам сайт недоступен. Поэтому, чтобы действительно проверить доступность сайта, нам нужно извлечь тег из разобранного HTML-контента. Для этого мы создаем простое условие "if", которое будет отображать сообщение об ошибке, если извлеченный элемент не может быть найден после разбора HTML-контента. Для этого просто напишите следующий код:

if 'Добро пожаловать' not in result.text:
    print('Чрезвычайная ситуация! Проблема с сайтом в данный момент!')
else:
    print('Сайт работает в настоящее время...')

С помощью приведенного выше условия мы также можем отображать сообщение об ошибке, когда текст "Добро пожаловать" недоступен в разобранном HTML-контенте.

С этим финальным кодом он должен выглядеть примерно так:

import requests
from bs4 import BeautifulSoup

def web_scraper(insert_url):
    page = requests.get(insert_url)
    soup = BeautifulSoup(page.content, 'html.parser')
    result = soup.find('<вставьте здесь тег>')
    status = page.status_code
    res = result.text    # Проверка доступности сайта
    if status != 200:
        print('Чрезвычайная ситуация! Проблема с сайтом в данный момент...')
    elif 'Добро пожаловать' not in res:
        print('Чрезвычайная ситуация! Проблема с сайтом в данный момент...')
    else:
        print('Сайт работает в настоящее время')

web_scraper('http://вставьте-сайт-сюда')

Чтобы запустить эту программу на вашем компьютере, вам нужно вставить URL сайта, доступность которого вы хотите проверять время от времени, передав его в качестве аргумента в функцию "web_scraper" при вызове, а также вставить тег контента, который вы хотите проверить на наличие на сайте, чтобы также определить его доступность.

  • Теперь осталось только отправить финальный код на Github из нашего локального репозитория. Если вы не знаете, как использовать Git, вы можете прочитать статью о том, как это делать эффективно. Вот ссылка на нее. И если вы не знаете, как создать удаленный репозиторий в Github, вот ссылка на статью, которая рассказывает об этом.

С помощью следующих команд мы можем отправить наш код из локального репозитория в удаленный репозиторий:

git init
git status
git add .
git commit -m "<Вставьте сообщение коммита здесь>"
git push

Чтобы просмотреть полный код на моем Github, просто нажмите на эту ссылку.


Теперь вы впервые выполнили парсинг веб-сайтов! Теперь остальное зависит от вас. Учите! Учите! Учите! Изучайте документацию по упомянутым выше библиотекам, работайте над проектами и создавайте свое резюме. До следующего раза, удачи.

Спасибо, что нашли время, чтобы прочитать это!

Пожалуйста, оставьте комментарий, если у вас есть мысли по этой теме - я открыт для обучения и постоянного совершенствования!

Я могу представить, насколько полезен был этот пост, пожалуйста, оставьте несколько 👏, чтобы показать свою поддержку автору!

Присоединяйтесь к FAUN: Веб-сайт** 💻|Подкаст 🎙️|Twitter 🐦|Facebook 👥|Instagram 📷|Группа Facebook 🗣️|Группа Linkedin 💬|** Slack 📱**|Cloud Native News 📰|More.**

Если этот пост был полезен, пожалуйста, нажмите несколько раз на кнопку 👏, чтобы показать свою поддержку автору 👇