Автор Тема: Импорт содержимого <div> в ячейку excel  (Прочитано 2959 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн xenofeel

  • Старожил
  • ****
  • Сообщений: 285
  • got strange mood
    • Просмотр профиля
Такая задача. Вытащить содержимое тега на сайте (цена на товар) и вставить его в строку экселя. Куда копать? Java или VBA макросы? Может кто делал уже?
« Последнее редактирование: 10 Январь 2015, 16:39:05 от xenofeel »
Ъ_Ъ только твёрдость во взгляде.

Оффлайн FearOfTheLight

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1038
  • [SPEED:1]
    • Просмотр профиля
Re: Получение содержимого <div> в строку excel
« Ответ #1 : 10 Январь 2015, 13:12:34 »
для питона есть beautiful soup. или можно сделать простейший парсер на чём угодно а потом скопипастить в эксель.

находим <div>
выводим на экран название товара
выводим \t
выводим цену товара
выводим \n
(нажмите, чтобы показать/скрыть)
повторить

в итоге вероятно надо будет подчистить немного мусора(на знаю, с других <div>'ов например) и результат вставить в эксель.
если нужно автоматически и всё - можно заморочится с очищением мусора через каскад if'ов или еще как а выход перекидывать напрямую в эксель
c02b7d24a066adb747fdeb12deb21bfa
За это сообщение 1 участник сказал спасибо: xenofeel

Оффлайн xenofeel

  • Старожил
  • ****
  • Сообщений: 285
  • got strange mood
    • Просмотр профиля
Re: Получение содержимого <div> в строку excel
« Ответ #2 : 10 Январь 2015, 14:21:05 »
Как то это слишком сложно оказалось. В голове намного проще выглядело =)
Ъ_Ъ только твёрдость во взгляде.

Оффлайн FearOfTheLight

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1038
  • [SPEED:1]
    • Просмотр профиля
Re: Получение содержимого <div> в строку excel
« Ответ #3 : 10 Январь 2015, 15:58:47 »
скинь пример текста, заверну попроще

(нажмите, чтобы показать/скрыть)

или нужно именно цену? т.е. цифры и неважно чему они соответствуют
тогда совсем просто
« Последнее редактирование: 10 Январь 2015, 16:09:52 от FearOfTheLight »
c02b7d24a066adb747fdeb12deb21bfa

Оффлайн Holkin

  • Постоялец
  • ***
  • Сообщений: 171
    • Просмотр профиля
Re: Получение содержимого <div> в строку excel
« Ответ #4 : 10 Январь 2015, 16:12:47 »
Windows вроде \n без \r не понимает.
И почему не вопспользоваться SAX или StAX?

Оффлайн xenofeel

  • Старожил
  • ****
  • Сообщений: 285
  • got strange mood
    • Просмотр профиля
Re: Получение содержимого <div> в строку excel
« Ответ #5 : 10 Январь 2015, 16:27:11 »
скинь пример текста, заверну попроще

Винт_1                               Цена_магазина_1               Цена_магазина_2
Винт_2                               Цена_магазина_1               Цена_магазина_2
Цена_магазина_1 берется с URL и в коде прописана как <span class="item_value">стопицот тыщ</span>. Вот как именно этот класс вытащить, вернее его содержимое, я и не догоняю.
Ъ_Ъ только твёрдость во взгляде.

Оффлайн FearOfTheLight

  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1038
  • [SPEED:1]
    • Просмотр профиля
Re: Импорт содержимого <div> в ячейку excel
« Ответ #6 : 10 Январь 2015, 18:33:17 »
т.е. Цена_магазина_1 = стопицот тыщ?
поделись страницей или html кодом. что-то я догоняю
c02b7d24a066adb747fdeb12deb21bfa

Оффлайн xenofeel

  • Старожил
  • ****
  • Сообщений: 285
  • got strange mood
    • Просмотр профиля
Re: Импорт содержимого <div> в ячейку excel
« Ответ #7 : 10 Январь 2015, 18:36:27 »
Посоны, решилось использованием VLOOKUP в Экселе. Всем спасибо. Главный минус - нужно вручную каждый раз импортировать листы из скаченных прайсов.
Ъ_Ъ только твёрдость во взгляде.

Оффлайн xenofeel

  • Старожил
  • ****
  • Сообщений: 285
  • got strange mood
    • Просмотр профиля
Re: Импорт содержимого <div> в ячейку excel
« Ответ #8 : 10 Январь 2015, 18:38:08 »
т.е. Цена_магазина_1 = стопицот тыщ?
поделись страницей или html кодом. что-то я догоняю

Да, именно так.
http://www.dns-shop.ru/catalog/i129738/zhestkij-disk-sata-3-500gb-seagate-7200-barracuda.html например.
Ъ_Ъ только твёрдость во взгляде.

Оффлайн Andys

  • Ветеран
  • *****
  • Сообщений: 1216
  • Maidophile
    • Просмотр профиля
Re: Импорт содержимого <div> в ячейку excel
« Ответ #9 : 10 Январь 2015, 21:24:54 »
Делал парсеры цен магазинов никс и фцентр (http://andys.su/nix, http://andys.su/fcenter)
На питоне написан скрипт скачивания html-прайса, парсинг и забитие цен в sqlite.
На пхп - веб-часть с внешней библиотекой построения графиков.
Делал для себя, поэтому на вылизывание кода забил.

Выбирание div'ов и выцепления из них содержимого я бы делал через regexp (универсально практически для всех языков)
п.с. про Beautiful Soup слышал много хорошего, но из принципа не люблю использовать внешние библиотеки, если для решения моей задачи достаточно стандартных

По моему опыту, именно редактирование xls-файлов - удобнее писать в vbs, там практически один в один макрос экселя выходит. В остальных языках синтаксис геморройнее.
Если задача не часто выполняемая - то можно сделать вывод в csv-файл на любом языке программирования, а потом тупо открывать в экселе
За это сообщение 2 участников сказали спасибо: FearOfTheLight, xenofeel

Оффлайн xenofeel

  • Старожил
  • ****
  • Сообщений: 285
  • got strange mood
    • Просмотр профиля
Re: Импорт содержимого <div> в ячейку excel
« Ответ #10 : 11 Январь 2015, 11:51:06 »
Фейл с VLOOKUP. Google Spreadsheets не обновляет содержимое ячейки при открытии документа. Попробовал IMPORTXML, тоже не прокатило, XPath не помогает. Что-то не так делаю. Например, функция вида =IMPORTXML ("http://www.dns-shop.ru/catalog/i129738/zhestkij-disk-sata-3-500gb-seagate-7200-barracuda.html"; "//*[@id="price_item"]") должна импортировать цену, но выдает ошибку синтаксиса. Но ведь ImportXML("https://en.wikipedia.org/wiki/Moon_landing"; "//a/@href") работает. Значит XPath найден не верно. Подскажите, как его правильно прописать.
Ъ_Ъ только твёрдость во взгляде.

Оффлайн Andys

  • Ветеран
  • *****
  • Сообщений: 1216
  • Maidophile
    • Просмотр профиля
Re: Импорт содержимого <div> в ячейку excel
« Ответ #11 : 11 Январь 2015, 12:01:20 »
Фейл с VLOOKUP. Google Spreadsheets не обновляет содержимое ячейки при открытии документа. Попробовал IMPORTXML, тоже не прокатило, XPath не помогает. Что-то не так делаю. Например, функция вида =IMPORTXML ("http://www.dns-shop.ru/catalog/i129738/zhestkij-disk-sata-3-500gb-seagate-7200-barracuda.html"; "//*[@id="price_item"]") должна импортировать цену, но выдает ошибку синтаксиса. Но ведь ImportXML("https://en.wikipedia.org/wiki/Moon_landing"; "//a/@href") работает. Значит XPath найден не верно. Подскажите, как его правильно прописать.
Кавычки в @id="price_item" надо на одинарные поменять, с двойными получается разрыв целостности текста

Вроде работает, но как-то странно
в ячейке формулы =IMPORTXML ("http://www.dns-shop.ru/catalog/i129738/zhestkij-disk-sata-3-500gb-seagate-7200-barracuda.html", "//span[@class = 'item_value']")
Значение - 4 590... при этом у меня с компа цена и в броузере и в коде страницы - 3 990. Будто сайт корректирует цену в зависимости от айпишника клиента

ещё п.с., уже отвлеченное, но может натолкнет на какую-нить мысль.
В гугль-таблице вполне реально написать скрипт, который будет делать некую работу (в моем реальном случае - запрос рсс-фида и заполнение в таблицу нужных мне данных из него), и потом этот скрипт поставить в расписание (скажем, запускать каждые 15 минут).
Пишется на яве, по моему есть какие-то мелкие гуглевские особенности
« Последнее редактирование: 11 Январь 2015, 12:15:10 от Andys »

Оффлайн xenofeel

  • Старожил
  • ****
  • Сообщений: 285
  • got strange mood
    • Просмотр профиля
Re: Импорт содержимого <div> в ячейку excel
« Ответ #12 : 11 Январь 2015, 13:39:02 »
Действительно, странно. У меня показывает 4250, а в таблицу отправляет 4590.
А как вы извлекали XPath?
Ъ_Ъ только твёрдость во взгляде.

Оффлайн xenofeel

  • Старожил
  • ****
  • Сообщений: 285
  • got strange mood
    • Просмотр профиля
Re: Импорт содержимого <div> в ячейку excel
« Ответ #13 : 11 Январь 2015, 14:41:57 »
Получилось импортировать цену. Но обнаружились проблемы:
http://www.dns-shop.ru/catalog/i129738/zhestkij-disk-sata-3-500gb-seagate-7200-barracuda.html - импортируется цена из магазина не в нужном регионе.
http://salon2116.ru/catalog/hdd/121637?sphrase_id=408394 - импортируется две цена в два столбца (вторая цена по безналу). Как импортировать только первую? (вид в формуле "//span[@class = 'price']" )
<div class="price_block clear">
<span class="price">
4 530.00 р. <sup><span class="tooltiped" title="Товар по этой цене можно приобрести только за наличный расчет при заказе в интернет-магазине" data-icon="&#xe085;"></span></sup>
<span class="nodiscount">
4 620.00 р.</span>
</span>
</div>
http://www.kursk.ret.ru/?&pn=prod&gid=787662 - импортируется без проблем.
« Последнее редактирование: 11 Январь 2015, 18:02:00 от xenofeel »
Ъ_Ъ только твёрдость во взгляде.

Оффлайн Andys

  • Ветеран
  • *****
  • Сообщений: 1216
  • Maidophile
    • Просмотр профиля
Re: Импорт содержимого <div> в ячейку excel
« Ответ #14 : 12 Январь 2015, 09:41:31 »
Получилось импортировать цену. Но обнаружились проблемы:
http://www.dns-shop.ru/catalog/i129738/zhestkij-disk-sata-3-500gb-seagate-7200-barracuda.html - импортируется цена из магазина не в нужном регионе.
http://salon2116.ru/catalog/hdd/121637?sphrase_id=408394 - импортируется две цена в два столбца (вторая цена по безналу). Как импортировать только первую? (вид в формуле "//span[@class = 'price']" )
По первому - возможно, сработает подставить вместо www в адресе - имя города (см. на dns-shop в выборе города есть линки, типа barnaul.dns-shop.ru итп).
По второму - надо уже получившееся обрезать простыми текстовыми функциями таблиц (LEFT, SEARCH, возможно MID)