Очистите веб-сайт с помощью этого учебника по 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 через командную строку.

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

 from bs4 import BeautifulSoup
import requests

Для начала посмотрим, как работает библиотека запросов:

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

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

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

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

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

 from bs4 import BeautifulSoup
import requests
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 :

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

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

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

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

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

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

 from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups)

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

 from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
h2tags = soup.find_all('h2')
for soups in h2tags:
print(soups.string)

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

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

 from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
tags = soup.find_all(['a', 'h2', 'title'])
for soups in tags:
print(soups.string)

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

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

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

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

 from bs4 import BeautifulSoup
import requests
website = requests.get('http://somewebpages.com/')
soup = BeautifulSoup(website.content, 'html.parser')
id = soup.find(id = 'enter the target id here')
print(id.text)

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

По сути, строка, содержащая идентификатор, становится:

 my_classes = soup.find(class_ = 'enter the target class name here')
print(my_classes.text)

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

 data = soup.find_all('div', class_ = 'enter the target class name here')
print(data)

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

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

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

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

 import pandas as pd
class scrapeit:
try:
def scrape(website=None, tag1=None, id1=None, tag2=None, id2=None):
if not (website and tag1 and id1 and tag2 and id2)==None:
try:
page = requests.get(website)
soup = BeautifulSoup(page.content, 'html.parser')
infotag1 = soup.find_all(tag1, id1)
infotag2 = soup.find_all(tag2, id2)
priced = [prices.text for prices in infotag1]
shirt = [shirts.text for shirts in infotag2]
data = {
'Price':priced,
'Shirt_name':shirt}
info = pd.DataFrame(data, columns=['Price', 'Shirt_name'])
print(info)
except:
print('Not successful')
else:
print('Oops! Please enter a website, two tags and thier corresponding ids')
except:
print('Not successful!')

Только что созданный парсер – это модуль многократного использования, который можно импортировать и использовать в другом файле Python. Чтобы вызвать функцию очистки из ее класса, вы используете 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, чтобы создать более полезные инструменты для очистки.