Руководство по парсингу веб-страниц с помощью Python с использованием Beautiful Soup
Опубликовано: 2020-06-23Введение в парсинг веб-страниц с помощью Python:
Когда дело доходит до просмотра веб-страниц, некоторые языки программирования предпочтительнее других. Одним из самых популярных среди них является Python. Помимо того, что это один из самых простых языков для изучения из-за более плавной кривой обучения, он также имеет то преимущество, что он является языком с широкой поддержкой разработчиков, что привело к появлению множества сторонних пакетов. Эти пакеты можно использовать для нескольких функций, что может быть сложно реализовать с помощью ядра Python. Некоторые распространенные примеры: для обработки изображений или компьютерного зрения мы используем OpenCV, для машинного обучения мы используем TensorFlow, а для построения графиков мы используем MatplotLib. Когда дело доходит до просмотра веб-страниц, одной из наиболее часто используемых библиотек является BeautifulSoup. Эта библиотека специально не очищает данные из Интернета, но если вы можете получить HTML-файл веб-страницы, она может помочь извлечь из него определенные точки данных. Как правило, библиотека используется для извлечения точек данных из документов XML и HTML.
Как работает BeautifulSoup?
Прежде чем приступить к написанию кода на Python, вы должны понять, как работает BeautifulSoup. После того, как вы извлекли HTML-контент веб-страницы и сохранили его в переменной, скажем, html_obj, вы можете преобразовать его в объект BeautifulSoup всего одной строкой кода:
| суп_обж = красивый суп (html_obj, 'html.parser') |
Где html_obj — это данные HTML, суп_обж — это полученный объект bs, а «html.parser» — это парсер, который использовался для преобразования. Когда у вас есть объект bs, названный суп_объект, обойти его очень просто, а так как обход достаточно прост, извлечение данных также становится простым. Возьмем пример. Скажем, вам нужно получить точку данных, называемую названием продукта, которая присутствует на каждой странице веб-сайта электронной коммерции. Теперь вы загрузили одну HTML-страницу продукта с этого веб-сайта и поняли, что на каждой странице есть название продукта, указанное в элементе типа span, имеющем идентификатор в качестве productTitle. Итак, как вы будете получать эти данные, скажем, с 1000 страниц продукта? Ну, вы получите данные HTML для каждой страницы и извлечете точку данных следующим образом:
| для промежутков в soap.findAll('span', attrs={'id': 'productTitle'}): name_of_product = spans.text.strip() |
Хотя это способ получить текстовые данные между определенным элементом тега, вы также можете получать данные из атрибутов тега.

Как очистить данные с веб-страниц с помощью BeautifulSoup?
Теперь, когда у нас есть некоторое общее представление о том, как осуществляется обход объекта bs, давайте напишем код и посмотрим, как он работает. Используя приведенный ниже фрагмент кода, вы можете очень легко извлечь данные из Zillow, ведущего рынка недвижимости из США. Вы можете запустить этот код и ввести URL-адрес листинга, чтобы получить выходные данные в формате JSON. Давайте разберемся с кодом, строка за строкой. Прежде всего, убедитесь, что на вашем компьютере установлен Python 3.7 или выше. Используйте pip для установки BeautifulSoup. Все остальные пакеты поставляются вместе с Python, так что вам не нужно их устанавливать. После этого установите редактор кода, такой как Atom или VS Code, и вы готовы к работе. Понимание кода важно, поэтому мы начнем с самой первой строки. Вам нужны четыре оператора импорта для определенных функций. Далее у вас есть три строки, начинающиеся с «ctx». Они специально предназначены для игнорирования ошибок SSL-сертификата, с которыми вы можете столкнуться при доступе к веб-сайтам через свой код. Затем мы принимаем URL-адрес веб-сайта в качестве входных данных от пользователя. Здесь вы также можете жестко закодировать URL-адрес или даже иметь массив из нескольких URL-адресов.
Процесс парсинга веб-страниц:
Затем мы получаем доступ к веб-странице, используя функцию запроса urllib. Не забудьте добавить User-Agent в заголовок, чтобы веб-сайт считал, что вы используете браузер. Причина этого заключается в том, что веб-сайты предназначены для доступа через браузеры, а не через код, и, следовательно, они могут заблокировать ваш IP-адрес, если поймают вас. Как только это будет сделано, мы выполнили все основные шаги, а затем мы будем преобразовывать объект HTML в объект bs, а затем преобразовывать его в формат utf-8 для обработки специальных символов и символов на веб-странице. Как только это будет сделано, мы извлекаем заголовок, краткие сведения и другие свойства путем разбора объекта bs. Как видите, в теге скрипта с атрибутом type = application/ld+json есть несколько точек данных, которые хранятся в формате JSON. Кроме того, вы можете видеть, что мы используем проверку i==0 и i==1. Это связано с тем, что на странице есть два тега скрипта (с одинаковым атрибутом). Первый тег дает нам некоторые точки данных, а второй — остальные. Как только мы извлекли все точки данных, вы можете сохранить их в файле JSON и сохранить как у нас. Вы также можете сохранить, загрузить его на сайт или даже отправить данные в API, если хотите.

| импортировать json импорт SSL из запроса импорта urllib.request, urlopen из bs4 импортировать BeautifulSoup # Игнорировать ошибки сертификата SSL # Берем URL листинга Zillow в качестве входных данных # Заставьте веб-сайт поверить, что вы используете браузер # HTML-страница -> Суп объектов BeautifulSoup = BeautifulSoup(веб-страница, 'html.parser') # Извлечение различных точек данных из списка свойств для мета в супе.findAll('meta', attrs={'name': 'description'}): для div в супе.findAll('div', attrs={'class': 'усечено количество символов'}): for (i, script) в enumerate(soup.findAll('script', с open('house_listing_data.json', 'w') в качестве выходного файла: с open('house_listing_data.html', 'wb') в виде файла: print('———-Извлечение данных завершено. Проверьте файл json.———-') |
Выходной JSON должен выглядеть примерно так:
| { «детали_длинные»: { «количество_комнат»: 3, «floor_size_in_sqrft»: «1392» }, "адрес": { «улица»: «22516 Джоан Д-р», «местность»: «Калифорния», «регион»: «MD», «почтовый_код»: «20619» }, «Заголовок»: «22516 Джоан Д-р, Калифорния, Мэриленд 20619 | МЛС № МДСМ167670», «details_short»: «22516 Joan Dr , California, MD 20619-3175 — дом на одну семью, выставленный на продажу за 150 000 долларов. Дом площадью 1392 кв. Фута состоит из 3 спален и 2 ванных комнат. Найдите 40 фотографий дома 22516 Joan Dr на Zillow. Просматривайте дополнительные сведения о недвижимости, историю продаж и данные Zestimate на Zillow. МЛС № МДСМ167670», «цена_в_долларах»: 150000, «inage»: «https://photos.zillowstatic.com/p_h/ISn2oi3glpvdv10000000000.jpg» } |
Вывод:
Использование BeautifulSoup для веб-скрейпинга может быть простым, если вы можете сначала проанализировать HTML-страницы вручную и выбрать теги, на которые нужно ориентироваться. Он может работать на страницах, которые не имеют динамического контента и не находятся за страницей входа. Для более сложных веб-страниц вам понадобятся более сложные инструменты. Наша команда PromptCloud помогает компаниям, которые хотят использовать данные и принимать решения на основе данных. Мы не только помогаем настроить полностью автоматизированные механизмы веб-скрапинга, которые запускаются с частыми интервалами в облаке, но также помогаем компаниям анализировать данные для извлечения тенденций и другой полезной информации.
