В нашем современном мире информация повсюду. И когда дело доходит до того, чтобы узнать, что думают люди, Yelp.com стоит на высоте. Это не просто место, где можно найти хорошую еду или услуги; это золотая жила мнений и оценок от обычных пользователей. Но как нам копнуть глубже и получить всю эту ценную информацию? Вот тут-то и вступает в дело этот блог.

Скрапинг Yelp может показаться сложным, но с помощью Python, удобного и популярного языка программирования, и с помощью Crawlbase Crawling API, это становится пустяком. Вместе мы узнаем, как устроен Yelp, как извлекать его данные (создание парсера Yelp) и даже как сохранять их для будущего использования. Итак, независимо от того, новичок вы или уже немного парсили, это руководство содержит простые шаги и умные советы, которые помогут вам максимально эффективно использовать богатые данные Yelp.

Содержание

  1. Почему стоит выбрать Scrape Yelp?
  • Почему сбор данных Yelp — это нечто особенное?
  1. Библиотеки и инструменты для сбора данных Yelp
  • Использование Python для веб-скрапинга Yelp
  • Установка и настройка необходимых библиотек
  • Выбор правильной среды разработки IDE
  1. Использующий Crawlbase Crawling API
  • Введение в Crawlbase и его особенности
  • Как этот API упрощает задачи веб-скрейпинга
  • Получение токена для Crawlbase Crawling API
  • Crawlbase Библиотека Python
  1. Как создать Yelp Scraper с помощью Python
  • Создание правильного URL для целевого поиска
  • Как использовать Crawlbase Библиотека Python для извлечения веб-контента
  • Проверка HTML для получения селекторов CSS
  • Разбор HTML с помощью BeautifulSoup
  • Внедрение пагинации: эффективное извлечение нескольких страниц
  1. Хранение и анализ данных Yelp
  • Сохранение данных в CSV-файле
  • Хранение данных в базе данных SQLite
  • Как использовать собранные данные Yelp для бизнеса или исследований
  1. Выводы
  2. FAQ

Почему стоит выбрать Scrape Yelp?

Давайте начнем с разговора о том, насколько полезным может быть парсинг Yelp. Yelp — это место, где люди оставляют отзывы о ресторанах, магазинах и многом другом. Но знаете ли вы, что мы можем использовать инструменты для автоматического сбора этой информации? Вот тут-то и появляется парсинг веб-сайтов. Это способ автоматического сбора данных с веб-сайтов. Вместо того чтобы вручную просматривать страницы и страницы контента, инструменты парсинга веб-сайтов могут извлекать нужные вам данные, экономя время и усилия.

Почему сбор данных Yelp — это нечто особенное?

Зачем царапать Yelp

Yelp — это не просто еще один веб-сайт; это платформа, построенная на голосах и опыте людей. Каждый отзыв, оценка и комментарий на Yelp представляет личный опыт общения с бизнесом. Эта коллективная обратная связь рисует подробную картину предпочтений потребителей, деловой репутации и местных тенденций. Для предприятий понимание этой обратной связи может привести к улучшениям и улучшению отношений с клиентами. Для исследователей это предоставляет реальный набор данных для анализа поведения, предпочтений и настроений потребителей. Более того, предприниматели могут использовать извлеченные данные Yelp для выявления пробелов на рынке или для проверки бизнес-идей. По сути, данные Yelp — это окно в пульс местных сообществ и рынков, что делает их жизненно важным ресурсом для различных целей.

Библиотеки и инструменты для сбора данных Yelp

Чтобы парсить Yelp с помощью Python, крайне важно иметь под рукой правильные инструменты. Правильная настройка среды гарантирует плавный парсинг. Давайте рассмотрим начальные шаги, чтобы все заработало.

Использование Python для веб-скрапинга Yelp

Python, известный своей простотой и универсальностью, является популярным выбором для задач веб-скрапинга. Его богатая экосистема предлагает множество библиотек, специально разработанных для скрапинга, извлечения данных и анализа. Одним из таких мощных инструментов является BeautifulSoup4 (часто сокращенно BS4), библиотека, которая помогает извлекать данные из файлов HTML и XML. В сочетании с Crawlbase, что упрощает процесс сбора данных, обрабатывая тонкости веб-взаимодействий, и Pandas— библиотека для обработки данных, которая структурирует извлеченные данные в удобные для чтения форматы. У вас есть внушительный набор инструментов для любых задач по извлечению данных.

Установка и настройка необходимых библиотек

Чтобы подготовить среду Python для задач парсинга, выполните следующие основные шаги:

  1. Питон: Если Python еще не установлен в вашей системе, посетите Официальном сайте для загрузки и установки соответствующей версии для вашей ОС. Следуйте инструкциям по установке, чтобы запустить Python.
  2. Пип: Как менеджер пакетов Python, Pip облегчает установку и управление библиотеками. Хотя многие установки Python идут в комплекте с Pip, убедитесь, что он доступен в вашей установке.
  3. Виртуальная среда: Принятие виртуальной среды — это разумный подход. Он создает изолированное пространство для вашего проекта, гарантируя, что зависимости останутся отделенными от других проектов. Чтобы инициировать виртуальную среду, выполните:
1
python -m венв myenv

Откройте командную строку или терминал и используйте одну из следующих команд для активации среды:

1
2
3
4
5
# Окна
myenv\Скрипты\активировать

# macOS/Linux
источник myenv/bin/активировать
  1. Установить необходимые библиотеки: Следующий шаг — установка необходимых библиотек. Откройте командную строку или терминал и выполните следующие команды:
1
2
3
4
5
Пип установить BeautifulSoup4
pip установить crawlbase
пип установить панды
pip установить matplotlib
pip установить scikit-learn

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

Выбор правильной среды разработки IDE

Выбор правильной интегрированной среды разработки (IDE) может значительно повысить производительность. Хотя вы можете писать код JavaScript в простом текстовом редакторе, использование специальной IDE может предложить такие функции, как автодополнение кода, инструменты отладки и интеграция с контролем версий.

Некоторые популярные IDE для разработки JavaScript включают в себя:

  • Код Visual Studio (код VS): VS Code — бесплатный редактор кода с открытым исходным кодом, разработанный Microsoft. Он имеет активное сообщество и предлагает широкий спектр расширений для разработки JavaScript.
  • Вебсторм: WebStorm — это коммерческая среда IDE от JetBrains, известная своей интеллектуальной помощью при кодировании и надежной поддержкой JavaScript.
  • Sublime Text: Sublime Text — легкий и настраиваемый текстовый редактор, популярный среди разработчиков благодаря своей скорости и расширяемости.

Выберите IDE, которая соответствует вашим предпочтениям и рабочему процессу.

Использующий Crawlbase Crawling API

The Crawlbase Crawling API выступает в качестве универсального решения, предназначенного для навигации по сложностям веб-скрапинга, особенно в таких сценариях, как Yelp, где динамический контент требует искусной обработки. Этот API служит в качестве инструмента для изменения правил игры, упрощая доступ к веб-контенту, рендеринг JavaScript и представление HTML-контента, готового к парсингу.

Как этот API упрощает задачи веб-скрейпинга

По своей сути веб-скрейпинг подразумевает извлечение данных с веб-сайтов. Однако реальная проблема заключается в навигации по лабиринту веб-структур, обработке потенциальных ловушек, таких как CAPTCHA, и обеспечении целостности данных. Crawlbase упрощает эти задачи, предлагая:

  1. Рендеринг JavaScript: Многие веб-сайты, включая Airbnb, активно используют JavaScript для динамической загрузки контента. Crawlbase API умело обрабатывает эти элементы, обеспечивая полный доступ к динамически отображаемым страницам Airbnb.
  2. Упрощенные запросы: API абстрагирует тонкости управления HTTP-запросы, куки и сеансы. Это позволяет вам сосредоточиться на совершенствовании логики скрапинга, в то время как API без проблем справляется с техническими нюансами.
  3. Хорошо структурированные данные: Данные, полученные через API, как правило, хорошо структурированы, что упрощает разбор данных и процесс извлечения. Это гарантирует, что вы сможете эффективно извлечь информацию о ценах, которую вы ищете на Airbnb.
  4. Масштабируемость: Crawlbase Crawling API поддерживает масштабируемый скрапинг за счет эффективного управление несколькими запросами одновременно. Такая масштабируемость особенно выгодна при работе с разнообразной и обширной информацией о ценах на Airbnb.

Внимание: Crawlbase Crawling API предлагает множество параметров в вашем распоряжении, позволяя вам точно настраивать ваши запросы на скрапинг. Эти параметры могут быть адаптированы под ваши уникальные потребности, делая ваши усилия по скрапингу более эффективными и точными. Вы можете изучить полный список доступных параметров в Документация по API.

Получение токена для Crawlbase Crawling API

Чтобы получить доступ к Crawlbase Crawling API, вам понадобится API-токен. Вот простое руководство по его получению:

  1. Посетить Crawlbase Вебсайт: Откройте веб-браузер и перейдите к Crawlbase страница регистрации чтобы начать процесс регистрации.
  2. Предоставьте свои данные: Вам будет предложено указать свой адрес электронной почты и создать пароль для вашего Crawlbase аккаунт. Заполните необходимую информацию.
  3. Проверка: После отправки ваших данных вам может потребоваться подтвердить ваш адрес электронной почты. Проверьте свой почтовый ящик на наличие письма с подтверждением от Crawlbase и следуйте предоставленным инструкциям.
  4. Логин: После проверки вашей учетной записи вернитесь на страницу Crawlbase веб-сайт и войдите в систему, используя только что созданные учетные данные.
  5. Получите доступ к вашему API-токену: Для использования вам понадобится API-токен. Crawlbase Crawling API. Вы можете найти свои API-токены здесь.

Внимание: Crawlbase предлагает два типа токенов: один для статических веб-сайтов и другой для динамических или JavaScript-ориентированных веб-сайтов. Поскольку мы собираем данные с Yelp, мы выберем Normal Token. Crawlbase щедро предлагает первоначальную квоту в 1,000 бесплатных запросов на Crawling API, что делает его отличным выбором для нашего проекта по веб-скрапингу.

Crawlbase Библиотека Python

The Crawlbase Библиотека Python предлагает простой способ взаимодействия с Crawlbase Crawling API. Вы можете использовать этот легкий и не имеющий зависимостей класс Python в качестве оболочки для Crawlbase API. Для начала инициализируем Crawling API класс с вашим Crawlbase токен. Затем вы можете сделать запросы GET, указав URL, который вы хотите скопировать, и любые желаемые параметры, такие как пользовательские агенты или форматы ответов. Например, вы можете скопировать веб-страницу и получить доступ к ее содержимому следующим образом:

1
2
3
4
5
6
7
8
9
от база сканирования Импортировать CrawlingAPI

# Инициализируем класс CrawlingAPI
api = CrawlingAPI({ токен: 'ВАШ_ТОКЕН_БАЗЫ_КРАНА' })

# Сделайте запрос GET для очистки веб-страницы
ответ = api.get('https://www.example.com')
if ответ['status_code'] == 200:
Распечатать(ответ['тело'])

Эта библиотека упрощает процесс извлечения веб-данных и особенно полезна для сценариев, где динамический контент, ротация IP-адресов и другие расширенные функции Crawlbase Требуются API.

Как создать Yelp Scraper с помощью Python

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

Создание правильного URL для целевого поиска

Чтобы получить определенные данные из Yelp, важно сформулировать правильный URL поиска. Например, если мы хотим получить данные из итальянских ресторанов в Сан-Франциско, наш URL Yelp будет выглядеть так:

1
HTTPS://www.yelp.com/search?find_desc=Итальянские+Рестораны&find_loc=Сан+Франциско%2C+CA

Вот:

  • find_desc определяет категорию бизнеса.
  • find_loc указывает местоположение.

Как использовать Crawlbase Библиотека Python для извлечения веб-контента

Crawlbase обеспечивает эффективный способ получения веб-контента. Интегрируя его с Python, наши попытки скрапинга становятся более рационализированными. Фрагмент для извлечения контента Yelp будет выглядеть так:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
от база сканирования Импортировать CrawlingAPI

# Замените «YOUR_CRAWLBASE_TOKEN» на ваш реальный Crawlbase Токен API
api_token = 'ВАШ_ТОКЕН_БАЗЫ_КРАНА'
crawlbase_api = CrawlingAPI({ токен: api_token })

yelp_url = "https://www.yelp.com/search?find_desc=Italian+Restaurants&find_loc=San+Francisco%2C+CA"

ответ = crawlbase_api.get(yelp_url)

if ответ['status_code'] == 200:
# Извлеченный HTML-контент после декодирования байтовых данных
html_content = ответ['тело'].decode('латинский1')
Распечатать(html_контент)
еще:
Распечатать(f"Запрос не выполнен с кодом статуса {ответ['status_code']}: {ответ['тело']}")

Чтобы начать процесс сбора данных с Yelp, выполните следующие простые шаги:

  1. Создать сценарий: Начните с создания нового файла скрипта Python. Назовите его yelp_scraping.py.
  2. Вставьте код: Скопируйте ранее предоставленный код и вставьте его в недавно созданный yelp_scraping.py .
  3. Типы: Откройте командную строку или терминал.
  4. Запустить скрипт: Перейдите в каталог, содержащий yelp_scraping.py и выполните скрипт с помощью следующей команды:
1
питон yelp_scraping.py

После выполнения HTML-содержимое страницы будет отображено в вашем терминале.

Вывод HTML

Проверка HTML для получения селекторов CSS

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

Проверка страницы поиска Yelp
  1. Открыть веб-страницу: Перейдите на сайт Yelp и попадете на страницу объекта недвижимости, которая вас заинтересовала.
  2. Щелкните правой кнопкой мыши и выберите «Проверить».: Используйте свое мастерство щелчка правой кнопкой мыши на элементе, который вы хотите извлечь, и выберите «Проверить» или «Проверить элемент» из контекстного меню. Это мистическое заклинание вызовет инструменты разработчика браузера.
  3. Найдите исходный HTML-код: В пределах инструментов разработчика исходный код HTML веб-страницы раскроет свои секреты. Наведите курсор на различные элементы на панели HTML и наблюдайте, как соответствующие части веб-страницы магически подсвечиваются.
  4. Определите селекторы CSS: Чтобы извлечь данные из определенного элемента, щелкните его правой кнопкой мыши в инструментах разработчика и изящно выберите «Копировать» > «Копировать селектор». Этот элегантный маневр перенесет селектор CSS для этого элемента в буфер обмена, готовый к использованию в ваших заклинаниях по веб-скрапингу.

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

Разбор HTML с помощью BeautifulSoup

После извлечения необработанного HTML-контента следующей задачей является извлечение значимых данных. Вот где BeautifulSoup вступает в игру. Это библиотека Python, которая анализирует HTML и XML-документы, предоставляя инструменты для навигации по проанализированному дереву и поиска в нем.

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать JSON

# Инициализация Crawlbase API
API_ТОКЕН = 'ВАШ_ТОКЕН_БАЗЫ_КРАНА'
crawling_api = CrawlingAPI({токен: API_ТОКЕН})

защиту fetch_yelp_page(URL):
"""Извлеките и расшифруйте содержимое страницы Yelp."""
ответ = crawling_api.get(url)
if ответ['status_code'] == 200:
возвращают ответ['тело'].decode('латинский1')
еще:
Распечатать(f"Запрос не выполнен с кодом статуса {ответ['status_code']}: {ответ['тело']}")
возвращают Ничто

защиту извлечение_информации_о_ресторане(листинг_карта):
"""Извлечение данных из одной карточки ресторана."""
имя_элемента = карточка_листинга.выберите_один('div[class*="businessName"] h3 > span > a')
элемент_рейтинга = карточка_листинга.выберите_один('div.css-volmcs + div.css-1jq1ouh > span:first-child')
review_count_element = listing_card.select_one('div.css-volmcs + div.css-1jq1ouh > span:last-child')
популярные_элементы_элементов = карточка_листинга.выбрать('div[class*="priceCategory"] div > p > span:first-child a')
элемент_диапазона_цен = карточка_листинга.выберите_один('div[class*="priceCategory"] div > p > span:not(.css-chan6m):nth-child(2)')
адрес_элемент = карточка_листинга.выберите_один('div[class*="priceCategory"] div > p > span:last-child')

возвращают {
«Название ресторана»: имя_элемента.текст.полоска() if имя_элемента еще Ничто,
"Рейтинг": рейтинг_элемент.текст.полоска() if рейтинг_элемент еще Ничто,
«Количество отзывов»: review_count_element.text.strip() if review_count_element еще Ничто,
"Адрес": адрес_элемент.текст.полоска() if адрес_элемент еще Ничто,
"Ценовой диапазон": элемент_диапазона_цен.текст.полоска() if элемент_диапазона_цен еще Ничто,
"Популярные товары": ''.join([элемент.текст.strip() для элемент in популярные_элементы_предметов]) if популярные_элементы_элементов еще Ничто
}

защиту извлечение_ресторанов_информации(html_контент):
"""Извлечь сведения о ресторане из HTML-контента."""
суп = КрасивыйСуп(html_content, 'html.парсер')
listing_cards = суп.выбрать('div[data-testid="serp-ia-card"]:not(.ABP)')

возвращают [extract_restaurant_info(карта) для карта in листинг_карт]

if __имя__ == "__основной__":
yelp_url = "https://www.yelp.com/search?find_desc=Italian+Restaurants&find_loc=San+Francisco%2C+CA"
html_content = fetch_yelp_page(yelp_url)

if html_контент:
restaurants_data = extract_restaurants_info(html_content)
Распечатать(json.dumps(restaurants_data, отступ=2))

Этот скрипт Python использует CrawlingAPI из библиотеки crawlbase для извлечения веб-контента. Основные функции:

  1. fetch_yelp_page(url): Извлекает HTML-контент из указанного URL-адреса, используя Crawlbase.
  2. extract_restaurant_info(listing_card): Анализирует данные одного ресторана из его HTML-карточки.
  3. extract_restaurants_info(html_content): Собирает все сведения о ресторане из HTML-кода всей страницы Yelp.

При прямом запуске он извлекает данные об итальянских ресторанах из Yelp в Сан-Франциско и выводит их в виде отформатированного JSON.

Пример вывода:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
[
{
«Название ресторана»: «Белла Траттория»,
"Рейтинг": "4.3",
«Количество отзывов»: "(1.9 тыс. отзывов)",
"Адрес": «Внутренний Ричмонд»,
"Ценовой диапазон": "$$",
"Популярные товары": «Итальянская кухня, бары, макаронные магазины»
},
{
«Название ресторана»: "Боттега",
"Рейтинг": "4.3",
«Количество отзывов»: "(974 отзыва)",
"Адрес": "Миссия",
"Ценовой диапазон": "$$",
"Популярные товары": «Итальянская кухня, Магазины пасты, Пицца»
},
{
«Название ресторана»: "Сотто Маре",
"Рейтинг": "4.3",
«Количество отзывов»: "(5.2 тыс. отзывов)",
"Адрес": «Северный пляж/Телеграф-Хилл»,
"Ценовой диапазон": "$$",
"Популярные товары": "Морепродукты, Итальянская кухня, Бары"
},
{
«Название ресторана»: "Багателла",
"Рейтинг": "4.8",
«Количество отзывов»: "(50 отзыва)",
"Адрес": «Марина/Коровья лощина»,
"Ценовой диапазон": нуль,
"Популярные товары": «Новая американская, итальянская, средиземноморская»
},
{
«Название ресторана»: "Офена",
"Рейтинг": "4.5",
«Количество отзывов»: "(58 отзыва)",
"Адрес": "Лейксайд",
"Ценовой диапазон": нуль,
"Популярные товары": "Итальянская, Бары"
},
{
«Название ресторана»: «Казаро Остерия»,
"Рейтинг": "4.4",
«Количество отзывов»: "(168 отзыва)",
"Адрес": «Марина/Коровья лощина»,
"Ценовой диапазон": "$$",
"Популярные товары": "Пицца, коктейль-бары"
},
{
«Название ресторана»: «Семь Холмов»,
"Рейтинг": "4.5",
«Количество отзывов»: "(1.3 тыс. отзывов)",
"Адрес": «Русская горка»,
"Ценовой диапазон": "$$$",
"Популярные товары": "Итальянская кухня, Винные бары"
},
{
«Название ресторана»: «Фиорелла - Закат»,
"Рейтинг": "4.1",
«Количество отзывов»: "(288 отзыва)",
"Адрес": «Внутренний закат»,
"Ценовой диапазон": "$$$",
"Популярные товары": «Итальянская кухня, пицца, коктейль-бары»
},
{
«Название ресторана»: "Паста Саплай Ко",
"Рейтинг": "4.4",
«Количество отзывов»: "(127 отзыва)",
"Адрес": «Внутренний Ричмонд»,
"Ценовой диапазон": "$$",
"Популярные товары": «Магазины макаронных изделий»
},
{
«Название ресторана»: «Траттория да Витторио – Сан-Франциско»,
"Рейтинг": "4.3",
«Количество отзывов»: "(963 отзыва)",
"Адрес": «Западный портал»,
"Ценовой диапазон": "$$",
"Популярные товары": "Итальянская, Пицца"
}
]

Внедрение пагинации для Yelp

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

Чтобы добиться этого с помощью Yelp, мы воспользуемся параметром URL &start= который определяет начальную точку для отображаемых результатов на каждой странице.

Давайте обновим существующий код, включив в него пагинацию:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать JSON

# Инициализация Crawlbase API
API_ТОКЕН = 'ВАШ_ТОКЕН_БАЗЫ_КРАНА'
crawling_api = CrawlingAPI({токен: API_ТОКЕН})

защиту fetch_yelp_page(URL):
"""Извлеките и расшифруйте содержимое страницы Yelp."""
# ... [остальная часть функции остается неизменной]

защиту извлечение_информации_о_ресторане(листинг_карта):
"""Извлечение данных из одной карточки ресторана."""
# ... [остальная часть функции остается неизменной]

защиту извлечение_ресторанов_информации(html_контент):
"""Извлечь сведения о ресторане из HTML-контента."""
# ... [остальная часть функции остается неизменной]

if __имя__ == "__основной__":
базовый_url = "https://www.yelp.com/search?find_desc=Italian+Restaurants&find_loc=San+Francisco%2C+CA"
все_рестораны_данные = []
# Отрегулируйте диапазон в соответствии с количеством результатов, которые вы хотите извлечь.
для Начало in ассортимент(0, 51, 10):
yelp_url = базовый_url + f"&старт={начинать}"
html_content = fetch_yelp_page(yelp_url)
if html_контент:
restaurants_data = extract_restaurants_info(html_content)
all_restaurants_data.extend(restaurants_data)

Распечатать(json.dumps(all_restaurants_data, отступ=2))

В обновленном коде мы циклически перебираем диапазон start значения (0, 10, 20, …, 50) для извлечения данных с каждой страницы результатов поиска Yelp. Затем мы расширяем all_restaurants_data список с данными с каждой страницы. Не забудьте настроить диапазон, если вы хотите извлечь больше или меньше результатов.

Хранение и анализ данных Yelp

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

Сохранение данных в CSV-файле

CSV — это широко признанный формат файла для табличных данных. Он предлагает простые и эффективные средства для архивации и распространения данных Yelp. Python pandas Библиотека предоставляет удобный интерфейс для обработки операций с данными, включая возможность записи данных в CSV-файл.

Давайте обновим предыдущий скрипт, чтобы включить это изменение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
Импортировать панд as pd

# Инициализация Crawlbase API
API_ТОКЕН = 'ВАШ_ТОКЕН_БАЗЫ_КРАНА'
crawling_api = CrawlingAPI({токен: API_ТОКЕН})

защиту fetch_yelp_page(URL):
"""Извлеките и расшифруйте содержимое страницы Yelp."""
# ... [остальная часть функции остается неизменной]

защиту извлечение_информации_о_ресторане(листинг_карта):
"""Извлечение данных из одной карточки ресторана."""
# ... [остальная часть функции остается неизменной]

защиту извлечение_ресторанов_информации(html_контент):
"""Извлечь сведения о ресторане из HTML-контента."""
# ... [остальная часть функции остается неизменной]

защиту сохранить_в_csv(список_данных, имя_файла):
"""Сохранение данных в CSV-файл с помощью pandas."""
df = pd.DataFrame(data_list)
df.to_csv(имя_файла, индекс=Ложь)

if __имя__ == "__основной__":
базовый_url = "https://www.yelp.com/search?find_desc=Italian+Restaurants&find_loc=San+Francisco%2C+CA"
все_рестораны_данные = []
# Отрегулируйте диапазон в соответствии с количеством результатов, которые вы хотите извлечь.
для Начало in ассортимент(0, 51, 10):
yelp_url = базовый_url + f"&старт={начинать}"
html_content = fetch_yelp_page(yelp_url)
if html_контент:
restaurants_data = extract_restaurants_info(html_content)
all_restaurants_data.extend(restaurants_data)

сохранить_в_csv(все_рестораны_данные, 'yelp_restaurants.csv')

The save_to_csv Функция использует pandas для преобразования указанного списка данных в DataFrame, а затем сохраняет его как CSV-файл с указанным именем файла.

yelp_restaurants.csv Предварительный просмотр:

yelp_restaurants.csv Предварительный просмотр

Хранение данных в базе данных SQLite

SQLite — это легкая дисковая база данных, которая не требует отдельного серверного процесса. Она идеально подходит для небольших приложений или когда вам нужна автономная база данных. Python sqlite3 Библиотека позволяет легко взаимодействовать с базами данных SQLite.

Давайте обновим предыдущий скрипт, чтобы включить это изменение:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
Импортировать sqlite3
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп

# Инициализация Crawlbase API
API_ТОКЕН = 'ВАШ_ТОКЕН_БАЗЫ_КРАНА'
crawling_api = CrawlingAPI({токен: API_ТОКЕН})

защиту fetch_yelp_page(URL):
"""Извлеките и расшифруйте содержимое страницы Yelp."""
# ... [остальная часть функции остается неизменной]

защиту извлечение_информации_о_ресторане(листинг_карта):
"""Извлечение данных из одной карточки ресторана."""
# ... [остальная часть функции остается неизменной]

защиту извлечение_ресторанов_информации(html_контент):
"""Извлечь сведения о ресторане из HTML-контента."""
# ... [остальная часть функции остается неизменной]

защиту сохранить_в_базу_данных(список_данных, имя_базы_данных):
"""Сохранение данных в базе данных SQLite."""
conn = sqlite3.connect(имя_базы_данных)
курсор = conn.cursor ()

# Создать таблицу
курсор.выполнить('' 'Окно выдачи
СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ ресторанов (
id INTEGER ПЕРВИЧНЫЙ КЛЮЧ АВТОИНКРЕТ,
имя ТЕКСТ,
рейтинг РЕАЛЬНЫЙ,
review_count ЦЕЛОЕ ЧИСЛО,
адрес ТЕКСТ,
диапазон_цен ТЕКСТ,
популярные_элементы ТЕКСТ
)
'' 'Окно выдачи)

# Вставить данные
для ресторан in список_данных:
курсор.выполнить("ВСТАВИТЬ В рестораны (название, рейтинг, количество отзывов, адрес, диапазон цен, популярные товары) ЗНАЧЕНИЯ (?, ?, ?, ?, ?, ?)",
(ресторан[«Название ресторана»], ресторан["Рейтинг"], ресторан[«Количество отзывов»], ресторан["Адрес"], ресторан["Ценовой диапазон"], ресторан["Популярные товары"]))

конн.коммит()
conn.close ()

if __имя__ == "__основной__":
базовый_url = "https://www.yelp.com/search?find_desc=Italian+Restaurants&find_loc=San+Francisco%2C+CA"
все_рестораны_данные = []
# Отрегулируйте диапазон в соответствии с количеством результатов, которые вы хотите извлечь.
для Начало in ассортимент(0, 51, 10):
yelp_url = базовый_url + f"&старт={начинать}"
html_content = fetch_yelp_page(yelp_url)
if html_контент:
restaurants_data = extract_restaurants_info(html_content)
all_restaurants_data.extend(restaurants_data)

сохранить_в_базу_данных(все_рестораны_данные, 'yelp_restaurants.db')

The save_to_database Функция сохраняет данные из списка в базу данных SQLite. Сначала она подключается к базе данных и обеспечивает существование таблицы с именем «restaurants» с определенными столбцами. Затем она вставляет данные каждого ресторана из списка в эту таблицу. После вставки всех данных она сохраняет изменения и закрывает соединение с базой данных.

restaurants Предварительный просмотр таблицы:

Рестораны Таблица Предварительный просмотр

Как использовать собранные данные Yelp для бизнеса или исследований

Yelp, с его огромным хранилищем обзоров, рейтингов и другой деловой информации, предлагает золотую жилу идей для компаний и исследователей. После того, как вы извлекли эти данные, следующим шагом будет их анализ и визуализация, открывая действенные идеи.

Бизнес-аналитика:

  1. Конкурентный анализ: Анализируя рейтинги и отзывы конкурентов, компании могут определить области улучшения своих собственных предложений.
  2. Предпочтения клиентов: Поймите, что нравится или не нравится клиентам в похожих компаниях, и соответствующим образом адаптируйте свои стратегии.
  3. Trend Зрительные: Определите новые тенденции на рынке, проанализировав модели обзоров и популярные товары.

Исследовательские возможности:

  1. Потребительское поведение: Подробно изучите отзывы клиентов, чтобы понять покупательское поведение, предпочтения и болевые точки.
  2. Рыночные тренды: Отслеживайте изменения в настроениях потребителей с течением времени, чтобы выявлять развивающиеся рыночные тенденции.
  3. Географический анализ: Сравните эффективность бизнеса, рейтинги и отзывы в разных местах.

Визуализация данных:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
Импортировать matplotlib.pyplot as PLT
Импортировать панд as pd
от база сканирования Импортировать CrawlingAPI
от bs4 Импортировать КрасивыйСуп
от sklearn.preprocessing Импортировать LabelEncoder

# Инициализация Crawlbase API
API_ТОКЕН = 'ВАШ_ТОКЕН_БАЗЫ_КРАНА'
crawling_api = CrawlingAPI({токен: API_ТОКЕН})

защиту fetch_yelp_page(URL):
"""Извлеките и расшифруйте содержимое страницы Yelp."""
# ... [остальная часть функции остается неизменной]

защиту извлечение_информации_о_ресторане(листинг_карта):
"""Извлечение данных из одной карточки ресторана."""
# ... [остальная часть функции остается неизменной]

защиту извлечение_ресторанов_информации(html_контент):
"""Извлечь сведения о ресторане из HTML-контента."""
# ... [остальная часть функции остается неизменной]

защиту plot_graph(данным):
# Преобразовать данные в pandas DataFrame
df = pd.DataFrame (данные)

# Инициализация LabelEncoder
label_encoder = LabelEncoder()

# Кодировать столбец «Диапазон цен»
df [«Ценовой диапазон закодирован»] = label_encoder.fit_transform(df[«Ценовой диапазон»])

# Преобразовать столбец «Рейтинг» в число с плавающей точкой
df ['Рейтинг'] = pd.to_numeric(df['Рейтинг'], ошибки=«принуждать», подавленный='плавать')

# Удалить строки, где «Рейтинг» равен NaN
df = df.dropna(подмножество=['Рейтинг'])

# Рассчитайте средние оценки для каждого ценового диапазона
avg_ratings = df.groupby(«Ценовой диапазон закодирован»)["Рейтинг"].иметь в виду()

# Распечатать оригинальные этикетки и их закодированные значения
оригинальные_метки = label_encoder.classes_
для закодированное_значение, метка in перечислять(оригинальные_метки):
Распечатать(f"Ценовой диапазон Значение: {закодированное_значение} соответствует метке: {этикетка}")

# Создать столбчатую диаграмму
plt.figure (figsize = (10, 6))
avg_ratings.plot(вид='бар', цвет=«небесно-голубой»)
plt.title («Средние оценки по ценовому диапазону»)
plt.xlabel («Ценовой диапазон»)
plt.ylabel («Средняя оценка»)
plt.xticks(вращение=45)
plt.grid(ось='y', стиль линии='-', альфа=0.7)
plt.tight_layout ()

# Показать сюжет
plt.show ()

if __имя__ == "__основной__":
базовый_url = "https://www.yelp.com/search?find_desc=Italian+Restaurants&find_loc=San+Francisco%2C+CA"
все_рестораны_данные = []
# Отрегулируйте диапазон в соответствии с количеством результатов, которые вы хотите извлечь.
для Начало in ассортимент(0, 51, 10):
yelp_url = базовый_url + f"&старт={начинать}"
html_content = fetch_yelp_page(yelp_url)
if html_контент:
restaurants_data = extract_restaurants_info(html_content)
all_restaurants_data.extend(restaurants_data)

plot_graph(данные_по_всем_ресторанам)

Выходной график:

Выходная столбчатая диаграмма

Этот график может стать полезным инструментом для понимания восприятия клиентами ценообразования и может служить руководством для разработки стратегий ценообразования или маркетинговых мероприятий для ресторанов.

Создайте Yelp Scraper с помощью Crawlbase

Это руководство дало вам основные знания и инструменты для легкого извлечения результатов поиска Yelp с помощью Python и Crawlbase Crawling APIНезависимо от того, новичок ли вы в этом деле или у вас уже есть некоторый опыт, изложенные здесь идеи станут надежной отправной точкой для ваших усилий.

Продолжая свой путь веб-скрейпинга, помните, что универсальность этих навыков выходит за рамки Yelp. Изучите наши дополнительные руководства для таких платформ, как Expedia, DeviantArt, Airbnb и Glassdoor, расширяя свои познания в области парсинга.

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

FAQ

Действия по веб-скрейпингу часто ходят по тонкой грани с точки зрения законности и этики. Когда дело доходит до таких платформ, как Yelp, крайне важно сначала ознакомиться с условиями обслуживания Yelp и robots.txt file. Эти документы дают представление о том, какие действия платформа разрешает и ограничивает. Кроме того, хотя контент Yelp находится в открытом доступе, способ и объем, в котором вы к нему обращаетесь, могут считаться оскорбительными или вредоносными. Кроме того, сбор персональных данных из отзывов или профилей пользователей может нарушать правила конфиденциальности в различных юрисдикциях. Всегда уделяйте первостепенное внимание пониманию и соблюдению как руководящих принципов платформы, так и применимых законов.

В. Как часто мне следует обновлять собранные данные Yelp?

Частота обновления ваших парсинговых данных зависит от характера вашего проекта и динамизма данных на Yelp. Если ваша цель — фиксировать тенденции в реальном времени, отзывы пользователей или информацию о текущих ценах, могут потребоваться более частые обновления. Однако чрезмерно частый парсинг может перегрузить серверы Yelp и потенциально привести к блокировке вашего IP-адреса. Рекомендуется соблюдать баланс: определить критичность своевременных обновлений для вашего проекта, проявляя при этом уважение к инфраструктуре Yelp. Мониторинг частоты обновлений Yelp или настройка оповещений о существенных изменениях также может определять ваши интервалы парсинга.

В. Могу ли я использовать полученные данные Yelp в коммерческих целях?

Использование данных, полученных с таких платформ, как Yelp, в коммерческих целях сопряжено с серьезными проблемами. Условия обслуживания Yelp прямо запрещают сбор данных, а использование их данных без разрешения в коммерческих целях может привести к юридическим последствиям. Крайне важно проконсультироваться с юристами, чтобы понять нюансы прав на использование данных и законов об интеллектуальной собственности. Если есть реальная необходимость использовать данные Yelp в коммерческих целях, рассмотрите возможность обращения в отделы партнерства или лицензирования данных Yelp. Они могут предоставить пути для получения законного доступа или возможностей партнерства. Всегда отдавайте приоритет прозрачности, этическому использованию данных и получению явных разрешений для снижения рисков.

В. Как я могу гарантировать точность полученных мной данных Yelp?

Обеспечение точности и надежности извлеченных данных является основополагающим для любого проекта, основанного на данных. При извлечении данных с Yelp или аналогичных платформ начните с внедрения надежных механизмов обработки ошибок в скриптах извлечения. Эти механизмы могут обнаруживать и устранять распространенные проблемы, такие как тайм-ауты соединения, неполное извлечение данных или несоответствия. Регулярно проверяйте извлеченные данные на соответствие текущему источнику, гарантируя, что ваша логика извлечения данных остается согласованной с любыми изменениями на веб-сайте Yelp. Кроме того, рассмотрите возможность внедрения проверок проверки данных после извлечения данных, чтобы выявить любые аномалии или несоответствия. Периодические ручные проверки или перекрестные ссылки с надежными вторичными источниками могут выступать в качестве дополнительных уровней проверки, повышая общее качество и надежность вашего извлеченного набора данных Yelp.