Очистите веб-сайт с помощью этого учебника по Python Beautiful Soup

Beautiful Soup — это библиотека Python с открытым исходным кодом. Он использует навигационные парсеры для очистки содержимого файлов XML и HTML. Вам нужны данные для нескольких аналитических целей. Однако, если вы новичок в Python и веб-парсинге, стоит попробовать библиотеку Python Beautiful Soup для проекта веб-парсинга.

С помощью Beautiful Soup с открытым исходным кодом Python библиотеки, вы можете получать данные, очищая любую часть или элемент веб-страницы с максимальным контролем над процессом. В этой статье мы рассмотрим, как вы можете использовать Beautiful Soup для очистки веб-сайта.

Как установить Beautiful Soup и начать работу с ним

Прежде чем продолжить, в В этой обучающей статье Beautiful Soup мы будем использовать Python 3 и beautifulsoup4 , последнюю версию Beautiful Soup. Убедитесь, что вы создали виртуальную среду Python, чтобы изолировать ваш проект и его пакеты от тех, которые находятся на вашем локальном компьютере.

Для начала вы должны установить библиотеку Beautiful Soup в вашей виртуальной среде. Beautiful Soup доступен в виде пакета PyPi для всех операционных систем, поэтому вы можете установить его с помощью команды pip install beautifulsoup4 через терминал.

Однако, если вы используете Debian или Linux, указанная выше команда по-прежнему работает, но вы можете установить ее с помощью диспетчера пакетов, запустив apt-get install python3-bs4 .

Beautiful Soup не очищает URL напрямую. Он работает только с готовыми файлами HTML или XML. Это означает, что вы не можете передать URL-адрес прямо в него. Чтобы решить эту проблему, вам необходимо получить URL-адрес целевого веб-сайта с помощью библиотеки запросов Python, прежде чем передавать его в Beautiful Soup.

Чтобы сделать эту библиотеку доступной для вашего парсера, запустите команду pip install requests через терминал.

Чтобы использовать библиотеку синтаксического анализатора XML, запустите pip install lxml , чтобы установить ее.

Проверьте веб-страницу, которую вы хотите очистить

Перед очисткой любого незнакомого веб-сайта лучше всего проверить его элементы. Вы можете сделать это, переключив браузер в режим разработчика. Использовать Chrome DevTools довольно просто, если вы используете Google Chrome.

Однако необходимо проверить веб-страницу, чтобы узнать больше о ее HTML-тегах, атрибутах, классах и идентификаторах. Это открывает основные элементы веб-страницы и ее типы контента..

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

Как очистить данные веб-сайтов с помощью Beautiful Soup

Теперь, когда у вас все готово, откройте предпочтительный редактор кода и создайте новый файл Python, присвоив ему выбранное имя. Однако вы также можете использовать веб-IDE, такие как Jupyter Notebook, если вы не знакомы с запуском Python через командную строку.

Затем импортируйте необходимые библиотеки:

  из bs4 import BeautifulSoup 
запросы на импорт

Во-первых, давайте посмотрим, как работает библиотека запросов:

  from bs4 import BeautifulSoup 
import requests
website = requests.get ('http://somewebpages.com')
print (website)

Когда вы запускаете приведенный выше код, он возвращает статус 200, указывая на то, что ваш запрос успешен. В противном случае вы получите статус 400 или некоторые другие статусы ошибок, которые указывают на неудачный запрос GET.

Не забывайте всегда заменять URL-адрес веб-сайта в скобках на целевой URL-адрес.

Получив веб-сайт с запросом get , вы затем передаете его в Beautiful Soup, который теперь может читать контент в виде файлов HTML или XML, используя свои встроенный синтаксический анализатор XML или HTML, в зависимости от выбранного вами формата.

Взгляните на следующий фрагмент кода, чтобы узнать, как это сделать с помощью анализатора HTML:

  from bs4 import BeautifulSoup 
запросы на импорт
website = requests.get ('http://somewebpages.com')
soup = BeautifulSoup (website.content, 'html.parser')
print ( soup)

Приведенный выше код возвращает всю DOM веб-страницы с ее содержимым.

Вы также можете получить более согласованную версию модели DOM, используя метод prettify . Вы можете попробовать это, чтобы увидеть результат:

  from bs4 import BeautifulSoup 
import requests
website = requests.get ('http://somewebpages.com/')
soup = BeautifulSoup (website.content, 'html.parser')
print (soup.prettify ())

Вы также можете получить чистый контент веб-страницы, не загружая ее элемент с помощью .text метод:

  из bs4 import BeautifulSoup 
запросы на импорт
website = requests.get ('http://somewebpages.com/' )
soup = BeautifulSoup (website.content, 'html.parser')
print (soup.text)

Как Очистка содержимого веб-страницы по имени тега

Вы также можете очистить содержимое определенного тега с помощью Beautiful Soup. Для этого вам необходимо включить имя целевого тега в запрос парсера Beautiful Soup.

Например, давайте посмотрим, как вы можете получить контент в тегах h2 веб-страницы.

  из bs4 import BeautifulSoup 
запросы на импорт
website = requests.get ('http://somewebpages.com/')
soup = BeautifulSoup (website.content, 'html.parser')
print (soup.h2)

Во фрагменте кода выше , soup.h2 возвращает первый элемент h2 веб-страницы и игнорирует остальные. Чтобы загрузить все элементы h2 , вы можете использовать встроенную функцию find_all и цикл for Python:

  из bs4 import BeautifulSoup 
запросы на импорт
website = request.get ('http://somewebpages.com/')
soup = BeautifulSoup (website.content, 'html.parser')
h2tags = soup.find_all ('h2')
для супов в h2tags:
print (soups)

Этот блок кода возвращает все h2 элементы и их содержание. Однако вы можете получить контент, не загружая тег, используя метод .string :

  из bs4 import BeautifulSoup 
запросы на импорт
website = requests.get ('http://somewebpages.com/')
soup = BeautifulSoup (website.content, 'html.parser')
h2tags = soup.find_all ('h2')
для супов в h2tags:
print (soups.string)

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

Однако вы также можете очистить другие теги, передав список тегов в метод find_all . Например, приведенный ниже блок кода очищает содержимое тегов a , h2 и title :

  из bs4 import BeautifulSoup 
запросы на импорт
website = requests.get ('http://somewebpages.com/')
soup = BeautifulSoup (website.content,' html.parser ')
tags = soup.find_all ([' a ',' h2 ' , 'title'])
для супов в тегах:
print (soups.string)

Как очистить веб-страницу Использование идентификатора и имени класса

После проверки веб-сайта с помощью DevTools он позволяет вам узнать больше об атрибутах id и class, содержащих каждый элемент в его DOM. Получив эту информацию, вы можете очистить эту веб-страницу с помощью этого метода. Это полезно, когда содержимое целевого компонента выходит из базы данных.

Вы можете использовать метод find для парсеров идентификаторов и классов.. В отличие от метода find_all , который возвращает итерируемый объект, метод find работает с одной не повторяемой целью, которой является идентификатор . в этом случае. Таким образом, вам не нужно использовать с ним цикл for .

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

  из bs4 import BeautifulSoup 
запросы на импорт
website = requests.get ('http://somewebpages.com/')
суп = BeautifulSoup (website.content, 'html.parser')
id = soup.find (id = 'введите целевой идентификатор здесь')
print (id.text)

Чтобы сделать это для имени класса, замените id на class . Однако написание class напрямую приводит к путанице синтаксиса, поскольку Python рассматривает его как ключевое слово. Чтобы обойти эту ошибку, вам нужно написать символ подчеркивания перед классом, например: class_ .

По сути, строка, содержащая идентификатор, выглядит следующим образом:

  my_classes = soup.find (class_ = 'введите здесь имя целевого класса')  
print(my_classes.text)

Однако вы также можете очистить веб-страницу, вызвав конкретное имя тега с соответствующим идентификатором или классом:

  data = soup.find_all ('div', class_ = 'введите имя целевого класса здесь') 
print (data)

Как сделать многоразовый скребок с красивым супом

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

Предположим, вы хотите узнать цену на рубашки с веб-сайта электронной коммерции. В приведенном ниже примере класса скребка извлекаются теги цен и рубашек с соответствующими идентификаторами или классами, а затем они возвращаются в виде фрейма данных Pandas с «Price» и «Shirt_name» в качестве имен столбцов.

Убедитесь, что вы pip install pandas через терминал, если вы еще этого не сделали.

  импортировать панды как pd 
class scrapeit:
try:
def scrape (website = None, tag1 = None, id1 = Нет, tag2 = Нет, id2 = Нет):
в противном случае (веб-сайт и tag1 и id1 и tag2 и id2) == Нет:
попробуйте:
page = requests. get (веб-сайт)
soup = BeautifulSoup (page.content, 'html.parser')
infotag1 = soup.find_all (tag1, id1)
infotag2 = soup.find_all (tag2 , id2)
priced = [price.text для цен в infotag1]
рубашка = [shirts.text для рубашек в infotag2]
data = {
'Цена ': цена,
' Shirt_name ': shirt}
info = pd. DataFrame (data, columns = ['Price', 'Shirt_name'])
print (info)
за исключением:
print ('Not удачно')
else :
print ('Ой! Пожалуйста, введите веб-сайт, два тега и их соответствующие идентификаторы')
за исключением:
print ('Не удалось!')

Только что созданный вами парсер является модулем многократного использования, и вы можете импортировать и использовать его в другом файле Python. . Чтобы вызвать функцию scrape из ее класса, вы используете scrapeit.scrape (‘URL-адрес веб-сайта’, ‘price_tag’, ‘price_id’, ‘shirt_tag’, ‘shirt_id’) . Если вы не укажете URL-адрес и другие параметры, инструкция else предложит вам это сделать.

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

  from scraper_module import scrapeit 
scrapeit. scrape ('URL', 'price_tag', 'price_id', 'shirt_tag', 'shirt_id')

Примечание: scraper_module — это имя файла Python, содержащего класс парсера.

Вы также можете проверить документацию Beautiful Soup, если хотите глубже погрузиться в то, как вы можете наилучшим образом его использовать.

Beautiful Soup — ценный инструмент для веб-скрапинга

Beautiful Soup — это мощный инструмент для очистки экрана Python, который дает вам контроль над тем, как ваши данные проходят через парсинг. Это ценный бизнес-инструмент, поскольку он может дать вам доступ к веб-данным конкурентов, таким как цены, тенденции рынка и многое другое.

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

Оцените статью
oilgasindustry.ru
Добавить комментарий