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

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

Оффлайн xenofeel

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

FearOfTheLight

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

находим <div>
выводим на экран название товара
выводим \t
выводим цену товара
выводим \n
Спойлер
System.out.println(имя_товара + "\t" + цена_товара);
[свернуть]
повторить

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

Оффлайн xenofeel

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

FearOfTheLight

  • Гость
Re: Получение содержимого <div> в строку excel
« Ответ #3 : 10 Января 2015, 15:58:47 »
скинь пример текста, заверну попроще

Спойлер
<div style="color:#0000FF">
  <h3>This is a heading</h3>
  <p>This is a paragraph.</p>
</div>

считываем построчно/побуквенно
если найден  "<div" то переходим на следующую строчку
string a = весь текст между > и <
следующая строчка
string b = весь текст между > и <
print(a + "\t" + b + "\n")

повторить

\t нужен чтобы поставить разделитель, легко узнаваемый для экселя. точка с запятой тоже подойдёт но хз что там за имена могут быть
\n это смела линии. так проще смотреть на это дело
[свернуть]

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

Оффлайн Holkin

  • Постоялец
  • ***
  • Сообщений: 172
    • Просмотр профиля
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

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

Оффлайн 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

  • Ветеран
  • *****
  • Сообщений: 1220
  • 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-файл на любом языке программирования, а потом тупо открывать в экселе
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

  • Ветеран
  • *****
  • Сообщений: 1220
  • 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

  • Ветеран
  • *****
  • Сообщений: 1220
  • 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)