Как спарсить данные с сайта в excel
Перейти к содержимому

Как спарсить данные с сайта в excel

Получение данных веб-страницы путем предоставления примеров

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

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

Get data from web by example.

Цены, перечисленные в изображениях, являются только для целей.

Использование получения данных из Интернета по примеру

Выберите веб-параметр в выборе соединителя, а затем нажмите кнопку «Подключиться«, чтобы продолжить.

В интернете введите URL-адрес веб-страницы, из которой вы хотите извлечь данные. В этой статье мы будем использовать веб-страницу Microsoft Store и покажем, как работает этот соединитель.

Если вы хотите продолжить, можно использовать URL-адрес Microsoft Store, который мы используем в этой статье:

Web dialog.

При нажатии кнопки «ОК» вы перейдете в диалоговое окно «Навигатор» , где отображаются все автоматически заданные таблицы на веб-странице. В приведенном ниже примере таблицы не найдены. Выберите » Добавить таблицу», используя примеры .

Navigator window.

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

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

data by example.

Предложения по значению включают только значения меньше или равно 128 символам длины.

Когда вы довольны данными, извлеченными на веб-странице, нажмите кнопку «ОК «, чтобы перейти в редактор Power Query. Затем можно применить дополнительные преобразования или сформировать данные, например объединение этих данных с другими источниками данных.

applying more transformations.

См. также

  • Добавление столбца из примеров
  • Фигура и объединение данных
  • Получение данных
  • Устранение неполадок соединителя Power Query Web

Как спарсить определенный товар с сайта, при этом не зная точных наименований?

У меня есть excel файл с 2-мя таблицами: в первой таблице название товара, а во второй цена.
Мне надо спарсить с сайтов только тот товар, который есть в таблице, но название товара на разных сайтах могут отличаться, есть предположение, что некоторые слова, все же, будут схожи с названиями из excel файла. Может, кто-то сталкивался с такими задачами, может, кто какой совет дать?
Парсер на питоне.

Отслеживать
2,558 1 1 золотой знак 5 5 серебряных знаков 22 22 бронзовых знака
задан 27 сен 2019 в 4:36
49 4 4 бронзовых знака
А ссылки на товары у вас есть?
27 сен 2019 в 6:38
Да, есть конечно
27 сен 2019 в 6:39

Тогда можно сканировать страницу находить индекс обозначение рубля и отнимать один тем самым находить цену на сайте! Можно ещё через относительный xpath путь !

27 сен 2019 в 6:48

начните с Beautiful Soup — библиотека для синтаксического разбора файлов HTML/XML. Requests – библиотека для получения, данных из интернета. Позволяет создавать запросы к сайтам и получать ответы с запрошенными данными.

27 сен 2019 в 11:02

Excel файл можно прочитать в pandas, затем работать с dataframe. На сайтах, в большинстве случаев, есть поиск, можно наименования «вбивать туда«, точнее использовать REST запрос для поиска, затем по выданным наименованиям смотреть что подходит, а что нет. Методом проб и ошибок.

5 июл в 3:33

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Расскажу на примере товаров, в которых я разбираюсь — трубопроводная арматура.

  1. Действительно важно понимать по какой причине и насколько может отличаться название товаров от ваших данных. Как правило это зависит от сферы применения, общепринятых стандартов или обычаев, ну и конечно от источника ваших данных.
    Например, если мы говорим о трубопроводной арматуре, на разных сайтах по-разному:
    • может отличаться написание диаметра, DN50 или Ду50 либо ⌀50;
    • отличается написание характеристики стали, нерж/нержавеющая/12Х18Н10Т
    • да и сам порядок слов в названии отличается почти всегда:
      «Задвижка Tecofi VG6400-00 шиберная ножевая со штурвалом и выдвижным штоком из нержавеющей стали» или то же изделие — «ЗАДВИЖКА ШИБЕРНАЯ НЕРЖ ОДНОСТОРОННЯЯ МЕЖФЛ VG6400-00 СО ШТУРВАЛОМ TECOFI»
  2. Если вы парсите товар технически более сложный, чем товары из продуктового супермаркета, то на первое место выходят характеристики товара, а не его название. Как вы могли заметить, в п.1 в названии задвижек не фигурирует диаметр, а это самый важный параметр, цена по диаметрам отличается в разы.

С учетом вышесказанного я бы предложил такое решение (будем искать Чугунную задвижку 30ч39р с обрезиненным клином DN50 PN16):

    Парсим страницу каталога на сайте с помощью Beautiful Soup и библиотеки requests , предварительно определив какой элемент и с каким идентификатором отвечает за название товаров, а также извлекаем текстовую составляющую:

from bs4 import BeautifulSoup import requests url = 'https://www.santech.ru/catalog/317/319/' page = requests.get(url) soup = BeautifulSoup(page.text, "html.parser") products = [x.text for x in soup.findAll('span', class_='products__name')] 
def distance(reference, test): m = len(reference) n = len(test) # Создаем словари для подсчета частоты слов в строках freq1 = <> freq2 = <> # Заполняем словарь freq1 для исходной строки for word in reference.split(): freq1[word] = freq1.get(word, 0) + 1 # Заполняем словарь freq2 для тестируемой строки for word in test.split(): freq2[word] = freq2.get(word, 0) + 1 # Создаем матрицу размером (m+1) x (n+1) и заполняем ее значениями от 0 до m и от 0 до n dp = [[0] * (n + 1) for x in range(m + 1)] for i in range(m + 1): dp[i][0] = i for j in range(n + 1): dp[0][j] = j # Заполняем матрицу построчно for i in range(1, m + 1): for j in range(1, n + 1): if reference[i - 1] == test[j - 1]: dp[i][j] = dp[i - 1][j - 1] else: delete_cost = dp[i - 1][j] + 1 insert_cost = dp[i][j - 1] + 1 replace_cost = dp[i - 1][j - 1] + 1 dp[i][j] = min(delete_cost, insert_cost, replace_cost) return dp[m][n] 
reference = "Чугунная задвижка 30ч39р с обрезиненным клином DN50 PN16" products_score = [distance(reference, x) for x in products] ##Сортируем наименования по полученным значениям combined_list = list(zip(products, products_score)) sorted_list = sorted(combined_list, key=lambda x: x[1]) print(sorted_list) #>>> [('Задвижка чугун 30ч39р МЗВ обрезиненный клин фл ЛМЗ', 30), ('Задвижка чугун 30ч39р МЗВ обрезиненный клин фл ЛМЗ', 30), ('Задвижка чугун 30ч939р аналог МЗВ обрезиненный клин фл Китай', 39), ('Задвижка чугун 30ч539р аналог МЗВ обрезиненный клин фл Китай', 39), ('Задвижка чугун 30ч939р аналог МЗВ обрезиненный клин фл Benarmo', 40), ('Задвижка чугун 111D аналог МЗВ обрезиненный клин фл Zetkama', 40), ('Задвижка чугун VOC4241C аналог МЗВ обрезиненный клин фл Tecofi', 42), ('Задвижка чугун VOC4241CM аналог МЗВ обрезиненный клин фл Tecofi', 42), ('Задвижка чугун VOC4251C аналог МЗВ обрезиненный клин фл Tecofi', 42), ('Задвижка чугун VOC4241C аналог МЗВ обрезиненный клин фл Tecofi', 42), ('Задвижка чугун 30ч906бр фл ЛМЗ', 43), …] 
  • в названиях нет характеристик диаметра, поэтому необходимо уже дальше парсить страницы товаров и их характеристики, тем более их оказалось даже две;
  • если бы мы искали «Чугунную задвижку 30ч939р с обрезиненным клином» мы бы ее не нашли, поэтому необходимо выявлять какие-то ключевые храктеристики и за их полное совпадение вычитать какие-то баллы или вовсе стразу сказать, что это то, что нам нужно;
  • если бы мы нашли «Чугунную задвижку 30ч939р с обрезиненным клином», то не факт, что бы нам понравилось то, что она китайская.

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

Парсер сайтов

Программа «Парсер сайтов» разработана для сбора, анализа, выборки, группировки, структуризации, трансформации данных с последующим выводом данных в таблицу Excel в форматах xls* и csv.

Парсер создан на VBA (Visual Basic for Applications) и представлен в виде надстройки для MS Excel, по сути это набор макросов, каждый набор отвечает за выполнение определенных функций при обработке данных.

Для парсинга каждого сайта пишется подпрограмма управления макросами под Ваши задачи (файл-настройка с расширением .xlp).

Таким образом, для работы программы необходимы: файл универсальной надстройки Parser.xla и файл управления надстройкой Name.xlp (Name — имя файла).

Видеообзор парсера

Какие задачи решает программа

  • Парсинг товаров для интернет магазинов в таблицу для последующего экспорта данных. Связь по артикулам с прайсами поставщиков. Загрузка фото под нужными именами в папки на жесткий диск.
  • Формирование баз контактов организаций: e-mail, телефонов, адресов, наименований.
  • Сбор и вывод в таблицу коэффициентов и результатов спортивных событий для дальнейшего анализа. Отслеживание и поиск необходимых матчей по условиям.
  • Парсинг файлов и папок на жестком диске, поиск по маске, смена имени, удаление, группировка.
  • Загрузка файлов любых форматов из сети интернет на жесткий диск или в облачное хранилище: фотографии, музыка, документы.
  • Запуск программы по расписанию: раз в час, неделю и т.д. Возможность зацикливания программы для отслеживания динамических данных на веб-ресурсах. При нужном совпадении данных есть возможность передачи их на e-mail или в Telegram.
  • При помощи парсера возможен не только сбор, но и подстановка/передача данных через браузер (например, отправка сообщений, простановка лайков в соцсетях и многое другое).
  • Парсинг с прохождением авторизации, передачей cookies и решением различных captcha.
  • Многопоточная загрузка, одновременный парсинг нескольких источников.

Скачать демо-версию «Парсер сайтов»

Важно! Перед скачиванием парсера добавьте расширение xla в исключения защитника Windows. Инструкция для Windiows 10 в слайдере ниже.

Добавьте программу в исключения сторонних антивирусов. Яндекс браузер блокирует скачивание файла, в Chrome, Firefox, Edge проблем нет. Подробнее про антивирусы

parser-setting-1

parser-setting-2

parser-setting-3

parser-setting-4

parser-setting-5

parser-setting-6

parser-setting-7

Парсер сайтов

Скачать пробную (TRIAL) версию программы (версия 4.2.5 от 16.08.2023). Пробная версия имеет полный функционал и ограничена 10 дневным тестовым периодом (нажмите на зеленый кубик).

Купить вечную лицензию можно тут

Скачать тестовую настройку программы для сайта Sima-land.ru (нажмите на шестерню). Тестовая настройка предполагает частичную загрузку данных для демонстрации возможностей парсера.

Заказать под Ваш источник можно тут

Инструкция по первому запуску программы

Перед работой с программой ознакомьтесь с ответами на технические вопросы о версиях Windows, Excel, как включить макросы и прочее.

Запуск на примере тестовой настройки для парсинга сайта-поставщика Sima-land.ru (для наглядного восприятия посмотрите видео):

  • Создаем в любом месте папку на жесткой диске или в облачном хранилище с произвольным названием, например, «Парсер». И скачиваем в неё программу Parser.xla.
  • Заходим в папку «Парсер», кликаем правой кнопкой мыши по файлу программы Parser.xla, нажимаем «Свойства», ставим галочку «Разблокировать», жмем «Применить» затем «ОК»: Эксель панель 5
  • Открываем файл двойным кликом левой кнопкой мыши, в папке «Парсер» будет создана папка «Настройки парсеров» и запустится Excel с дополнительными элементами в ленте: Эксель панель 1
  • В папку «Настройки парсеров» скачиваем файл настройки Sima-land.ru_Test.xlp, далее в Экселе нажимаем «Дополнительно» и «Обновить панель инструментов»: Эксель панель 2
  • В ленте из выпадающего списка выбираем название Sima-land.ru_Test» и нажимаем «Начать загрузку данных»: Эксель панель 3
  • Ожидаем завершения загрузки данных. Исходя из технического задания на парсинг сайта sima-land.ru в процессе работы программы в папке с парсером созданы папки Downloads (для загрузки фото) и files (для сохранения файла выгрузки)
  • Если желаете прервать загрузку нажимаем «Отмена»«Да»: Эксель панель 4

Примечание: рассмотренный выше парсер загружает по 3 элемента массива на каждом подуровне сайта. Другие тестовые настройки можно найти в каталоге работ.

Создать техническое задание на настройку программы «Парсер сайтов» можно тут.

Преимущества работы с программой

  • Широко масштабируемый постоянно обновляемый программный комплекс, позволяет решить самые разнообразные задачи.
  • Настройка программы практически под любой веб-ресурс для получения необходимой информации с выводом нужных Вам данных в таблицу.
  • Запуск парсера пользователем в любое время неограниченное количество раз для получения самой актуальной информации.
  • Прямая работа с исполнителем для настройки программы.
  • Наш опыт настройки программы более 6 лет, реализовано более 3000 проектов.
  • Выше перечисленное позволяет получить Вам необходимые данные в сжатые сроки по доступной цене.

Остались вопросы? Пишите, звоните Skype и e-mail, с удовольствием ответим.

  • Парсеры по тематикам:
    • Email адреса (2)
    • Букмекерские конторы и спорт (6)
    • Интернет-магазины и товары (4)
    • Карты и справочники (1)
    • Номера телефонов (2)
    • Порталы и доски объявлений (2)
    • Парсер BetCity.ru
    • Парсер одежды «Tamrikoshop.com»
    • Парсер климатехники «Миркли.ру»
    • Парсер «АВС-электро»
    • Парсер Santehnika-online.ru
    • О программе
    • Примеры работ
    • Купить лицензию
    • Заказать настройку парсера
    • Контакты
    • Частые вопросы

    Как спарсить любой сайт?

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

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

    TL;DR

    Чтобы спарсить данные с вебсайта, пробуйте подходы именно в таком порядке:

    1. Найдите официальное API,
    2. Найдите XHR запросы в консоли разработчика вашего браузера,
    3. Найдите сырые JSON в html странице,
    4. Отрендерите код страницы через автоматизацию браузера,
    5. Если ничего не подошло — пишите парсеры HTML кода.

    Совет профессионалов: не начинайте с BS4/Scrapy

    BeautifulSoup4 и Scrapy — популярные инструменты парсинга HTML страниц (и не только!) для Python.

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

    Приходим к выводу, что не надо извлекать данные из HTML тегов раньше времени: разметка страницы может сильно поменяться, а CSS-селекторы и XPath могут не помочь. Используйте другие методы, о которых ниже. ⬇️

    Используйте официальный API

    �� Ого? Это не очевидно ��? Конечно, очевидно! Но сколько раз было: сидите пилите парсер сайта, а потом БАЦ — нашли поддержку древней RSS-ленты, обширный sitemap.xml или другие интерфейсы для разработчиков. Становится обидно, что поленились и потратили время не туда. Даже если API платный, иногда дешевле договориться с владельцами сайта, чем тратить время на разработку и поддержку.

    Sitemap.xml — список страниц сайта, которые точно нужно проиндексировать гуглу. Полезно, если нужно найти все объекты на сайте. Пример: http://techcrunch.com/sitemap.xml

    RSS-лента — API, который выдает вам последние посты или новости с сайта. Было раньше популярно, сейчас все реже, но где-то еще есть! Пример: https://habr.com/ru/rss/hubs/all/

    Поищите XHR запросы в консоли разработчика

    Кабина моего самолета

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

    Обычно, эти данные запрашиваются джаваскриптом через простые GET/POST запросы. А значит, можно подсмотреть эти запросы, их параметры и заголовки — а потом повторить их у себя в коде! Это делается через консоль разработчика вашего браузера (developer tools).

    В итоге, даже не имея официального API, можно воспользоваться красивым и удобным закрытым API. ☺️

    Даже если фронт поменяется полностью, этот API с большой вероятностью будет работать. Да, добавятся новые поля, да, возможно, некоторые данные уберут из выдачи. Но структура ответа останется, а значит, ваш парсер почти не изменится.

    Алгорим действий такой:

    Кнопка, которую я искал месяцы

    1. Открывайте вебстраницу, которую хотите спарсить
    2. Правой кнопкой -> Inspect (или открыть dev tools как на скрине выше)
    3. Открывайте вкладку Network и кликайте на фильтр XHR запросов
    4. Обновляйте страницу, чтобы в логах стали появляться запросы
    5. Найдите запрос, который запрашивает данные, которые вам нужны
    6. Копируйте запрос как cURL и переносите его в свой язык программирования для дальнейшей автоматизации.

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

    Вместо этого попробуйте просто скопипастить и захардкодить их в своем парсере: очень часто эти строчки валидны 7-30 дней, что может быть окей для ваших задач, а иногда и вообще несколько лет. Или поищите другие XHR запросы, в ответе которых бекенд присылает эти строчки на фронт (обычно это происходит в момент логина на сайт). Если не получилось и без куки/сессий никак, — советую переходить на автоматизацию браузера (Selenium, Puppeteer, Splash — Headless browsers) — об этом ниже.

    Поищите JSON в HTML коде страницы

    Как было удобно с XHR запросами, да? Ощущение, что ты используешь официальное API. �� Приходит много данных, ты все сохраняешь в базу. Ты счастлив. Ты бог парсинга.

    Но тут надо парсить другой сайт, а там нет нужных GET/POST запросов! Ну вот нет и все. И ты думаешь: неужели расчехлять XPath/CSS-selectors? ��‍♀️ Нет! ��‍♂️

    Чтобы страница хорошо проиндексировалась поисковиками, необходимо, чтобы в HTML коде уже содержалась вся полезная информация: поисковики не рендерят Javascript, довольствуясь только HTML. А значит, где-то в коде должны быть все данные.

    Современные SSR-движки (server-side-rendering) оставляют внизу страницы JSON со всеми данные, добавленный бекендом при генерации страницы. Стоп, это же и есть ответ API, который нам нужен! ������

    Вот несколько примеров, где такой клад может быть зарыт (не баньте, плиз):

    Красивый JSON на главной странице Habr.com. Почти официальный API! Надеюсь, меня не забанят.И наш любимый (у парсеров) Linkedin!

    Алгоритм действий такой:

    1. В dev tools берете самый первый запрос, где браузер запрашивает HTML страницу (не код текущий уже отрендеренной страницы, а именно ответ GET запроса).
    2. Внизу ищите длинную длинную строчку с данными.
    3. Если нашли — повторяете у себя в парсере этот GET запрос страницы (без рендеринга headless браузерами). Просто requests.get .
    4. Вырезаете JSON из HTML любыми костылямии (я использую html.find(«= <") ).

    Отрендерите JS через Headless Browsers

    Если XHR запросы требуют актуальных tokens, sessions, cookies. Если вы нарываетесь на защиту Cloudflare. Если вам обязательно нужно логиниться на сайте. Если вы просто решили рендерить все, что движется загружается, чтобы минимизировать вероятность бана. Во всех случаях — добро пожаловать в мир автоматизации браузеров!

    Если коротко, то есть инструменты, которые позволяют управлять браузером: открывать страницы, вводить текст, скроллить, кликать. Конечно же, это все было сделано для того, чтобы автоматизировать тесты веб интерфейса. I’m something of a web QA myself.

    После того, как вы открыли страницу, чуть подождали (пока JS сделает все свои 100500 запросов), можно смотреть на HTML страницу опять и поискать там тот заветный JSON со всеми данными.

    driver.get(url_to_open) html = driver.page_source
    Selenoid — open-source remote Selenium cluster

    Для масштабируемости и простоты, я советую использовать удалённые браузерные кластеры (remote Selenium grid).

    Недавно я нашел офигенный опенсорсный микросервис Selenoid, который по факту позволяет вам запускать браузеры не у себя на компе, а на удаленном сервере, подключаясь к нему по API. Несмотря на то, что Support team у них состоит из токсичных разработчиков, их микросервис довольно просто развернуть (советую это делать под VPN, так как по умолчанию никакой authentication в сервис не встроено). Я запускаю их сервис через DigitalOcean 1-Click apps: 1 клик — и у вас уже создался сервер, на котором настроен и запущен кластер Headless браузеров, готовых запускать джаваскрипт!

    Вот так я подключаюсь к Selenoid из своего кода: по факту нужно просто указать адрес запущенного Selenoid, но я еще зачем-то передаю кучу параметров бразеру, вдруг вы тоже захотите. На выходе этой функции у меня обычный Selenium driver, который я использую также, как если бы я запускал браузер локально (через файлик chromedriver).

    def get_selenoid_driver( enable_vnc=False, browser_name="firefox" ): capabilities = < "browserName": browser_name, "version": "", "enableVNC": enable_vnc, "enableVideo": False, "screenResolution": "1280x1024x24", "sessionTimeout": "3m", # Someone used these params too, let's have them as well "goog:chromeOptions": , "prefs": < "credentials_enable_service": False, "profile.password_manager_enabled": False >, > driver = webdriver.Remote( command_executor=SELENOID_URL, desired_capabilities=capabilities, ) driver.implicitly_wait(10) # wait for the page load no matter what if enable_vnc: print(f"You can view VNC here: ") return driver

    Заметьте фложок enableVNC . Верно, вы сможете смотреть видосик с тем, что происходит на удалённом браузере. Всегда приятно наблюдать, как ваш скрипт самостоятельно логинится в Linkedin: он такой молодой, но уже хочет познакомиться с крутыми разработчиками.

    Парсите HTML теги

    Мой единственный совет: постараться минимизировать число фильтров и условий, чтобы меньше переобучаться на текущей структуре HTML страницы, которая может измениться в следующем A/B тесте.

    Даниил Охлопков — Data Lead @ Runa Capital

    Подписывайтесь на мой Телеграм канал, где я рассказываю свои истории из парсинга и сливаю датасеты.

    Надеюсь, что-то из этого было полезно! Я считаю, что в парсинге важно, с чего ты начинаешь. С чего начать — я рассказал, а дальше ваш ход ��

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *