Содержание
веб-скрейпинг данных отеля | Извлечение цен на отели из Trivago
Многие веб-сайты отелей позволяют сравнивать множество различных цен на отели в разных городах по всему миру!
Сегодня мы покажем вам, как можно очистить веб-сайт отеля, такой как booking.com, для экспорта данных, таких как название отеля, рейтинг, цена и сравнение цен!
В этом примере мы собираемся извлечь данные об отелях с сайта booking.com для отелей в Торонто. Извлечет название отеля, цену, рейтинг. Мы собираемся экспортировать его в виде файла excel/CSV или JSON 9.0003
Вы можете использовать эту ссылку, если хотите следовать дальше: Отели в Торонто
Итак, начнем!
Веб-скрейпинг Данные отеля
Несмотря на то, что существует несколько инструментов веб-скрейпинга, мы думаем, вам понравится ParseHub! Его можно использовать бесплатно, и он имеет набор функций, таких как:
- Ротация IP-адресов
- Планирование
- Облачный парсинг
- Многие другие!
Скачать ParseHub бесплатно
youtube.com/embed/7ypmOGmHTyM?feature=oembed» frameborder=»0″ allow=»accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture» allowfullscreen=»»/>
- После открытия ParseHub нажмите «Новый проект» и используйте URL-адрес со страницы результатов Booking.com. Теперь страница будет отображаться внутри приложения.
- В этом примере мы переключимся в режим просмотра, закроем окно даты, затем выключим режим просмотра.
- Начните с нажатия на первое название первого отеля в списке. Он будет выделен зеленым цветом, что означает, что он был выбран. На левой боковой панели переименуйте свой выбор в «hotel_name».
- Теперь Parsehub предложит другие данные, которые вы хотите извлечь, желтым цветом. Остальные отели теперь будут выделены желтым цветом. Нажмите на второй отель в списке, чтобы выбрать их все. Все отели на первой странице теперь будут выделены зеленым цветом. Сейчас вы собираете имена и URL-адреса моделей.
- Теперь давайте извлечем такие данные, как цена, сравнение цен и рейтинг. Для этого вам нужно будет выполнить команду относительного выбора. Начните с нажатия на знак ПЛЮС (+) рядом с выбранным вами отелем и выберите команду Относительный выбор.
- С помощью команды «Относительный выбор» щелкните первый отель, выделенный оранжевым цветом, а затем его цену. Появится стрелка, показывающая ассоциацию, которую вы создаете.
- Возможно, вам придется повторить этот процесс для другого отеля, чтобы полностью обучить скребок. На левой боковой панели переименуйте свой выбор в «цена».
- Повторите шаги 6–7, чтобы получить дополнительные данные для каждого отеля, чтобы извлечь нужные данные. В этом случае мы также собираемся извлечь сравнение цен и рейтинг. Ваш проект должен выглядеть примерно так:
Если бы мы начали наш проект, мы бы дали выписку только с первой страницы отелей. Теперь мы научим вас, как добавить разбивку на страницы в ваш проект парсинга веб-страниц.
- Нажмите знак ПЛЮС (+) рядом с выбранной страницей и выберите команду «Выбрать».
- С помощью команды «Выбрать» прокрутите вниз до ссылки «Следующая страница». Нажмите на него, чтобы выбрать его, и переименуйте свой выбор в next_button.
- Нажмите на значок рядом с вашим выбором next_button, чтобы развернуть его. Удалить команду под следующим выбором.
- Щелкните знак ПЛЮС (+) рядом со следующим выбором и добавьте команду Щелчок.
- Появится всплывающее окно с вопросом, является ли это ссылкой «следующая страница». Нажмите «Да» и введите количество раз, которое вы хотите повторить этот процесс. В этом случае повторим 2 раза.
Запуск парсинга
Пришло время запустить парсинг. Для этого нажмите зеленую кнопку «Получить данные» на левой боковой панели. Здесь вы сможете протестировать, запланировать или запустить задание очистки.
Для больших проектов мы рекомендуем всегда тестировать задание перед его выполнением. В этом случае мы запустим его сразу.
После завершения прогона вы сможете загрузить его в виде файла Excel или JSON.
Включение ротации IP-адресов (платная функция)
Если ваш проект веб-скрапинга возвращается пустым, вам может потребоваться включить ротацию IP-адресов. Вы можете быть заблокированы при очистке данных, но чередование IP-адресов позволит вам по-прежнему очищать данные отеля
Если вас блокируют, давайте покажем вам, как вы можете включить ротацию IP-адресов.
Примечание. Если вы включите чередование IP-адресов, выполнение вашего проекта займет больше времени.
- Щелкните значок шестеренки, а затем выберите настройки
- Щелкните Rotate IP address
- Появится всплывающее окно с предупреждением о вашей скорости выполнения, нажмите OK
Теперь запустите свой проект как обычно.
Подведение итогов
Теперь вы знаете, как извлечь данные об отеле и экспортировать их в файл Excel/CSV или JSON.
Мы понимаем, что проекты веб-скрапинга могут быть довольно сложными. Если у вас возникнут какие-либо проблемы или возникнут вопросы, вы можете связаться с нашей службой поддержки клиентов, используя наш чат, где мы будем более чем рады помочь вам!
Что ты будешь царапать?
Удачи!
Скачать ParseHub бесплатно
python — прокрутите excels и извлеките значения в excel с помощью pandas
Я изучаю python, выполняя небольшую автоматизацию, и мне нужна помощь здесь. У меня есть файлы excel в папке, и мне нужно прочитать все файлы excel, найти определенный текст в excel и получить значение из определенного столбца, если нужный текст найден. Я смог прочитать excel и получить значения, но я думаю, что получаю эти значения в отдельном фрейме данных для каждого excel. После того, как у меня есть кадр данных, я пытаюсь объединить, но на выходе получаю только одну строку.
Мне нужна помощь в получении строк для всех первенств в одном кадре данных. Ниже мой код
импортировать панд как pd импортировать numpy как np из пути импорта pathlib p = Путь (путь к файлам Excel) filtered = [x вместо x в p.glob("**/*.xlsx") if not x.name.__contains__("R4")] #выполнение фильтра для исключить некоторые excel ls = список (отфильтрованный) L = длина (л.с.) для x в ls[0:L]: данные = pd.read_excel(x, имя_листа=[1], заголовок=1) дф = данные[1] a = np.where(df.values == 'Вычитаемое физическое лицо') b = [x[0] для x в a] знач = б[0] d1 = np. where(df.values == 'Вычитаемая семья') b = [x[0] для x в d1] знач3 = б[0] INdata1 = df.loc[val, 'В сети\nVALUE'] INDDEDIN = pd.DataFrame({"ИНДИВИДУАЛЬНЫЙ ИНН": [INdata1]}) INdata3 = df.loc[val3, 'В сети\nЗНАЧ'] FAMDEDIN = pd.DataFrame({"СЕМЕЙНЫЙ ИНН": [INdata3]}) результат = pd.concat([INDDEDIN, FAMDEDIN], ось = 1) печать (ИНДЕДИН) ИНДИВИДУАЛЬНАЯ ФРАНШИЗА ИНН 0 1400,0 ИНДИВИДУАЛЬНАЯ ФРАНШИЗА ИНН 0 1500,0 печать (ФАМДЕДИН) СЕМЕЙНАЯ ИНН 0 4200,0 СЕМЕЙНАЯ ИНН 0 2400,0 печать (результат) ИНДИВИДУАЛЬНАЯ ФРАНШИСНАЯ ИНН СЕМЕЙНАЯ ФРАНШИСНАЯ ИНН 0 1500,0 2400,0
Но я ожидаю, что результат будет напечатан, как показано ниже:
ИНДИВИДУАЛЬНАЯ ФРАНШИСНАЯ ИНН СЕМЕЙНАЯ ИНН 0 1500,0 2400,0 1400,0 4200,0
Спасибо, ewz93. Я попробовал код ниже, и это намного проще и проще. Но результат печатается, как показано ниже:
0 1 ИНН [1400.0] [1500.0] СЕМЕЙНАЯ ФРАНШИЗА ИНН [4200.0] [2400.0]
Мне нужен результат, как показано ниже, как я могу это сделать?
ИНДИВИДУАЛЬНАЯ ИНН С ФРАНШИЗОЙ СЕМЕЙНАЯ ИНН 1400,0 4200,0 1500,0 2400,0
- python
- pandas
Я не могу следовать вашему коду (вы должны попробовать использовать более выразительные имена переменных не только для других, но и для вас, если вы позже захотите понять или изменить части кода) , но я предполагаю, что проблема в основном из-за индексов.
То, как вы конструируете это, приводит к тому, что INDDEDIN и FAMDEDIN состоят из двух строк, каждая из которых имеет индекс 0, поэтому использование concat вызовет проблемы. Вы можете попробовать что-то вроде pd.concat([INDDEDIN, FAMDEDIN], axis=1, ignore_index=True)
если вы уверены, что порядок в них всегда идеально выровнен. Лучшим способом сделать это было бы очистить способ создания DataFrame.
Насколько я понимаю, вы также присваиваете значения INDDEDIN и FAMDEDIN внутри цикла, а затем используете их в первый раз вне цикла, в результате чего для части после цикла используется только значение последней итерации.
Хотя существует много способов, один из способов, которым я предпочитаю создавать DataFrame в итерации, — это создать вложенный словарь, а затем использовать pandas.DataFrame.from_dict()
.
Редактировать: Вот как вы можете это сделать (и сделать его более читабельным):
result = {}
из пути импорта pathlib
p = Путь (путь к файлам Excel)
# фильтровать файлы
filtered_files = [x вместо x в p. glob("**/*.xlsx"), если не x.name.__contains__("R4")]
# перебираем отфильтрованные файлы
для файла в filtered_files:
# прочитать файл в DataFrame
full_df = pd.read_excel (файл, имя_листа = [1], заголовок = 1)
# получить имя столбца 1
col_1_name = full_df.columns[1]
# получить частичный фрейм данных со строками, отфильтрованными по значению в столбце 1
ded_ind_df = full_df[full_df[col_1_name]=='Вычитаемое физическое лицо']
# получить частичный фрейм данных со строками, отфильтрованными по значению в столбце 1
ded_fam_df = full_df[full_df[col_1_name]=='Вычитаемая семья']
# добавить результаты для этого файла в словарь результатов
# РЕДАКТИРОВАТЬ: добавлено [0], чтобы просто получить элемент вместо элемента в списке
результат [файл] = {
'ИНДИВИДУАЛЬНЫЙ ИНН ОПЛАТЫ': list(ded_ind_df['In-Network\nVALUE'])[0],
'СЕМЕЙНАЯ ИНН': list(ded_fam_df['In-Network\nVALUE'])[0]
}
# преобразовать словарь результатов в DataFrame
# РЕДАКТИРОВАТЬ: добавлен .