Изучите основы веб-парсинга и анализа HTML с помощью библиотеки Python BeautifulSoup (bs4)

Необходимость парсинга веб-страниц и парсинга HTML возрастает день ото дня. Для решения задачи синтаксического анализа большинство программистов предпочитает Python. BeautifulSoup - самая полезная библиотека Python для анализа HTML и XML.

В этой статье я расскажу, как установить BeautifulSoup и проанализировать HTML-страницу. Попробую собрать доступные вакансии из Раздела заданий переполнения стека.

Во-первых, давайте зайдем на страницу вакансий Stack Overflow. Во втором левом столбце мы видим название должности, название компании, местонахождение, технологические требования, дату публикации вакансии и тип вакансии. Мы попытаемся разобрать названия должностей с этой страницы и узнать.

Установка BeautifulSoup

Для Debian или Ubuntu Linux мы можем установить, как показано ниже:

$ apt-get install python2-bs4 #python2
$ apt-get install python3-bs4 #python3

Или мы можем установить, используя pip, например:

$ pip2 install bs4 #python2
$ pip3 install bs4 #python3

Мы должны установить пакет для работы с URL-адресами, поскольку мы будем иметь дело с живыми веб-страницами. Для этого мы установим urllib.

Установка urllib

Мы можем установить с помощью pip следующим образом:

$ pip2 install urllib #python2
$ pip3 install urllib #python3

Загрузка HTML-страницы

Чтобы загрузить страницу URL как файл HTML, мы должны использовать фрагменты кода.

html_file = urllib.request.urlopen(self.url).read()

Приготовление супа HTML

После загрузки HTML-файла мы должны приготовить суп с помощью BeautifulSoup. Воспользуемся для этого следующим кодом.

html_soup = BeautifulSoup(html_file, 'html.parser')

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

И. Проверьте коды HTML-страниц, выберите данные для копирования и скопируйте путь к селектору:

Перейдите в наш браузер, наведите указатель мыши на данные, которые мы хотим извлечь, и проверьте HTML-код. Во-первых, мы должны выбрать часть HTML-кода, которая выделяет наши данные.

И, последние шаги для этого выбора пути, мы скопируем Селектор следующим образом:

II. Исправьте путь и данные, которые нам нужны

Если мы сможем правильно скопировать путь и присвоить его переменной selector, он будет выглядеть следующим образом:

selector = '#content > div.js-search-container.search-container.mbn24 > div > div.grid--cell.fl1.br.bc-black-2 > div > div.listResults > div:nth-child(2) > div:nth-child(2) > div.grid--cell.fl1 > h2 > a'

Извлечь данные из HTML Soup

Чтобы распечатать данные, мы будем использовать приведенный ниже фрагмент кода:

job_post_html = html_soup.select(selector)[0]

Используя предыдущий фрагмент кода, мы извлекаем the<a> … </a>tag из Должности.

<a href="/jobs/530033/senior-software-engineer-voltaiq?a=2RKUtYbfQFEY&amp;so=i&amp;pg=1&amp;offset=1&amp;total=1545&amp;so_medium=Internal&amp;so_source=JobSearch" title="Senior Software Engineer" class="s-link stretched-link">Senior Software Engineer</a>

Из этого тега мы должны выбрать заголовок. Затем, чтобы выбрать плитку, мы снова приготовим суп из этого тега и проанализируем заголовок. Мы будем использовать для этого следующий код.

job_post_soup = BeautifulSoup(str(job_post_html), 'html.parser')                job_title = job_post_soup.a['title']

Наконец, у нас есть желаемые данные в переменной job_title. Вот мой последний код:

Заключение

Спасибо за ваше драгоценное время и за чтение этой статьи.

Если вы найдете эту статью полезной, не стесняйтесь комментировать и делиться. Кроме того, вы можете посетить мой веб-профиль, прочитать мои сообщения в блоге и подписаться на меня в Twitter.

Чтобы научиться запускать коды C / C ++ в Sublime Text, вы можете посетить эту статью.

Удачи!

Больше контента на plainenglish.io

Ресурсы:

  1. Https://www.crummy.com/software/BeautifulSoup/bs4/doc/
  2. Https://docs.python.org/3/library/urllib.html#module-urllib
  3. Https://stackoverflow.com/jobs