CoderCastrov logo
CoderCastrov
Анализ данных

Один пример парсинга с использованием Beautiful Soup

Один пример парсинга с использованием Beautiful Soup
просмотров
4 мин чтение
#Анализ данных

часть вторая эксперимента по анализу настроений с использованием BERT с оценкой на данных, полученных из интернета — отзывы Yelp с помощью Beautiful Soup

Огромное количество данных в Интернете является богатым ресурсом для любой области исследований или личного интереса. Для эффективного сбора данных необходимы навыки парсинга веб-страниц.

Парсинг веб-страницы включает ее загрузку и извлечение данных из нее. Загрузка - это скачивание страницы (что делает браузер, когда пользователь просматривает страницу). Поэтому парсинг веб-страниц является основным компонентом парсинга веб-страниц для последующей обработки. После загрузки происходит извлечение данных. Содержимое страницы может быть разобрано, просмотрено, переформатировано, его данные могут быть скопированы в электронную таблицу или загружены в базу данных. Парсеры веб-страниц обычно извлекают что-то из страницы, чтобы использовать это для других целей в другом месте.

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

Является ли парсинг веб-страниц законным?

К сожалению, на этот вопрос нет однозначного ответа. Некоторые веб-сайты явно разрешают парсинг. Другие явно запрещают его. Многие веб-сайты не предлагают ясных указаний в одну или другую сторону.

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

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

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

  • Рассмотрите возможность кэширования контента, который вы парсите, чтобы он загружался только один раз.
  • Вставьте паузы в свой код, используя функции, такие как time.sleep(), чтобы не перегружать серверы слишком большим количеством запросов слишком быстро.

The Beautiful Soup

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

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

$ python -m pip install beautifulsoup4

В последнем блоге был представлен эксперимент с BERT, в котором было показано, как трансформер можно использовать для оценки тональности текста. Отзывы о случайном тексте оцениваются по шкале от 1 до 5, где 1 - наименее хорошо, а 5 - отличная оценка. Теперь, когда BERT уже создан и работает, в этой части будут извлечены комментарии с веб-страницы и будет проведена оценка тональности.

Прежде всего, необходимо вставить URL (просто вставьте URL в скрипт):

#запрос с кодом парсинга
r = requests.get('https://www.yelp.com/biz/the-local-american-saloon-belgrade') 
soup = BeautifulSoup(r.text, 'html.parser')

Очевидно, что каждый из комментариев уже хранится внутри класса.

Легко можно проверить, изучив структуру HTML справа от экрана

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

Вывод запроса

Этот вывод будет передан в Beautiful Soup, и следующие несколько строк кода фактически извлекут интересующие компоненты.

#извлечение определенных компонентов
regex = re.compile('.*comment.*')
#поиск абзацев
result = soup.find_all('p', {'class':regex})
reviews = [result.text for result in result]

Таким образом, Beautiful Soup позволяет создавать "суп", и мы можем наблюдать это просто, набрав "soup" в colab или jupyter notebook, вы заметите формат, по которому Beautiful Soup может осуществлять поиск. Все отзывы находятся внутри тега <p>, который является абзацем с классом "comment".

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

result[0].text

Наконец, для завершения, комментарии могут быть аккуратно отображены в DataFrame из модуля Pandas перед оценкой тональности:

import pandas as pd
import numpy as np  
#передача отзыва
df = pd.DataFrame(np.array(reviews), columns=['review'])

Проверка вывода DataFrame и первых пяти комментариев (head):

С помощью функции sentiment_score будут оценены все отзывы:

def sentiment_score(review):   
   tokens = tokenizer.encode(review, return_tensors ='pt')   
   result = model(tokens)   
   return int(torch.argmax(result.logits))+1

Эта функция используется для каждого комментария, хранящегося в DataFrame:

df['sentiment'] = df['review'].apply(lambda x: sentiment_score(x[:512]))

Результат оценки тональности с помощью BERT имеет форму DataFrame, где все результаты рассчитаны. Это можно легко проверить, набрав "df".

Оценка тональности с помощью BERT - результат в Pandas DataFrame

Ресурсы и код:

Real Python — Beautiful Soup

Beautiful Soup: Построение веб-парсера с помощью Python - Real Python

В этом руководстве вы пройдете основные шаги процесса парсинга веб-страниц. Вы узнаете, как написать скрипт...

realpython.com

Wikipedia — Веб-парсинг

Веб-парсинг - Wikipedia

Веб-парсинг, веб-харвестинг или извлечение данных из веба - это извлечение данных с веб-сайтов. Веб-парсинг...

en.wikipedia.org

Colab Notebook

https://colab.research.google.com/drive/1JlVk_YIhslV6RgF6zfSxTB5NC2QwPsmf#scrollTo=qSeDG58L_975