Форум Dwarf Fortress

Разное => Оффтопик => Софт и кодинг => Тема начата: xenofeel от 10 Января 2015, 11:24:08

Название: Импорт содержимого <div> в ячейку excel
Отправлено: xenofeel от 10 Января 2015, 11:24:08
Такая задача. Вытащить содержимое тега на сайте (цена на товар) и вставить его в строку экселя. Куда копать? Java или VBA макросы? Может кто делал уже?
Название: Re: Получение содержимого <div> в строку excel
Отправлено: FearOfTheLight от 10 Января 2015, 13:12:34
для питона есть beautiful soup. или можно сделать простейший парсер на чём угодно а потом скопипастить в эксель.

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

в итоге вероятно надо будет подчистить немного мусора(на знаю, с других <div>'ов например) и результат вставить в эксель.
если нужно автоматически и всё - можно заморочится с очищением мусора через каскад if'ов или еще как а выход перекидывать напрямую в эксель
Название: Re: Получение содержимого <div> в строку excel
Отправлено: xenofeel от 10 Января 2015, 14:21:05
Как то это слишком сложно оказалось. В голове намного проще выглядело =)
Название: Re: Получение содержимого <div> в строку excel
Отправлено: FearOfTheLight от 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 это смела линии. так проще смотреть на это дело
[свернуть]

или нужно именно цену? т.е. цифры и неважно чему они соответствуют
тогда совсем просто
Название: Re: Получение содержимого <div> в строку excel
Отправлено: Holkin от 10 Января 2015, 16:12:47
Windows вроде \n без \r не понимает.
И почему не вопспользоваться SAX или StAX?
Название: Re: Получение содержимого <div> в строку excel
Отправлено: xenofeel от 10 Января 2015, 16:27:11
скинь пример текста, заверну попроще

Винт_1                               Цена_магазина_1               Цена_магазина_2
Винт_2                               Цена_магазина_1               Цена_магазина_2
Цена_магазина_1 берется с URL и в коде прописана как <span class="item_value">стопицот тыщ</span>. Вот как именно этот класс вытащить, вернее его содержимое, я и не догоняю.
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: FearOfTheLight от 10 Января 2015, 18:33:17
т.е. Цена_магазина_1 = стопицот тыщ?
поделись страницей или html кодом. что-то я догоняю
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: xenofeel от 10 Января 2015, 18:36:27
Посоны, решилось использованием VLOOKUP в Экселе. Всем спасибо. Главный минус - нужно вручную каждый раз импортировать листы из скаченных прайсов.
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: xenofeel от 10 Января 2015, 18:38:08
т.е. Цена_магазина_1 = стопицот тыщ?
поделись страницей или html кодом. что-то я догоняю

Да, именно так.
http://www.dns-shop.ru/catalog/i129738/zhestkij-disk-sata-3-500gb-seagate-7200-barracuda.html например.
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: Andys от 10 Января 2015, 21:24:54
Делал парсеры цен магазинов никс и фцентр (http://andys.su/nix, http://andys.su/fcenter)
На питоне написан скрипт скачивания html-прайса, парсинг и забитие цен в sqlite.
На пхп - веб-часть с внешней библиотекой построения графиков.
Делал для себя, поэтому на вылизывание кода забил.

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

По моему опыту, именно редактирование xls-файлов - удобнее писать в vbs, там практически один в один макрос экселя выходит. В остальных языках синтаксис геморройнее.
Если задача не часто выполняемая - то можно сделать вывод в csv-файл на любом языке программирования, а потом тупо открывать в экселе
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: xenofeel от 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 найден не верно. Подскажите, как его правильно прописать.
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: Andys от 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 минут).
Пишется на яве, по моему есть какие-то мелкие гуглевские особенности
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: xenofeel от 11 Января 2015, 13:39:02
Действительно, странно. У меня показывает 4250, а в таблицу отправляет 4590.
А как вы извлекали XPath?
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: xenofeel от 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 - импортируется без проблем.
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: Andys от 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)
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: xenofeel от 12 Января 2015, 12:46:56
По первому - возможно, сработает подставить вместо www в адресе - имя города (см. на dns-shop в выборе города есть линки, типа barnaul.dns-shop.ru итп).
По второму - надо уже получившееся обрезать простыми текстовыми функциями таблиц (LEFT, SEARCH, возможно MID)
1 - не сработало, тоже сразу так подумал. (решил вычитанием разницы в процентах, она похоже фиксированная, но время покажет)
2 - тупо сделал текст белым цветом =) про такие функции не знаю.
Название: Re: Импорт содержимого <div> в ячейку excel
Отправлено: xenofeel от 16 Января 2015, 11:43:18
Можете подсказать нормальный рабочий способ конвертировать текстовое значение в число? IMPORTXML импортирует с одного сайта цену в текстовом формате, а нужно в числовом.