Можно ли парсить данные с сайта сразу в таблицу csv

  • Автор темы Автор темы baimkin
  • Дата начала Дата начала

baimkin

Client
Регистрация
04.08.2015
Сообщения
283
Реакции
111
Баллы
43
Добрый день!
Собственно вопрос, можно ли парсить данные с сайта сразу в таблицу csv?
С тем как парсить нужную информацию разобрался, но получается ее собирать только в списки. А хотелось бы парсить данные сразу в таблицу с разделением по столбцам. Или хотя бы из списков импортировать данные в столбцы таблицы, возможное ли такое в данной программе, если возможно может ли кто подсказать как реализовать?
 
Прочитал несколько раз, не все же так и не понял как в одной таблице сохранить по столбцам все что с парсерено.
Чтобы из файлов все раскидать по таблице, не могу найти функции загрузки информации сразу из нескольких файлов с присвоением каждому файлу своего столбца.
А для того чтобы напрямую парсить в таблицу, не смог найти функцию где можно выбрать столбец в который будет парсится информация и куда вводить сам текст регулярного выражения с помощью которого парсится информация.
 
Прямого функционала нет, чтобы отдельный файл закидывать в отдельный столбец, но если поиграться можно добиться желаемого. Например объединить все файлы в один, в них добавить свой разделитель столбца. При загрузке объединенного файла в таблицу выбрать свой разделитель.
А вообще лучше парсить данные сразу в таблицу, а не в список. Для таблиц есть операции Добавить строку или Добавить ячейку (с указанием столбца).
 
Скажем так. Таблица это список с уникальными разделителями.
Строка от строки разделяется переносом грубо говоря.
А столбец от столбца разделителем. Например ";".
Так вот вы подготавливаете сначала данные которые пойдут в каждый столбец, и потом записываете всю строку с разделителями в таблицу.
{значение в столбец "A"};{значение в столбец "B"};{значение в столбец "C"};{значение в столбец "D"}
Главное потом таблицу открыть, указав нужный разделитель.
 
Танцы с бубнами не нужны тут. Просто выстройте архитектуру парсинга грамотно и заносите данные одной строкой.
 
Что то далеко уйти не получается, максимум до чего дошел это http://prntscr.com/80ro8x
Вы говорите что можно парсинг делать одной строкой, а не подскажите как можно несколько регулярных выражений отделить друг от друга чтобы результат их работы выводился в текстовый файл в виде "ссылка название артикул цена"

Привожу регулярные выражения которые составил для парсинга:
(?<=<noindex><a\ href=").*(?="\ title) (?<=alt=").*(?="></a>) ссылка
(?<=alt=").*(?="></a>) название
(?<=<b>Артикул:\ </b>).*(?=&nbsp;&nbsp;&nbsp;) артикул
(?<=\ \ \ \ \ \ \ \ \ \ \ \ <span>).*(?=\.-</span>) цена
 
Что то далеко уйти не получается, максимум до чего дошел это http://prntscr.com/80ro8x
Вы говорите что можно парсинг делать одной строкой, а не подскажите как можно несколько регулярных выражений отделить друг от друга чтобы результат их работы выводился в текстовый файл в виде "ссылка название артикул цена"

Привожу регулярные выражения которые составил для парсинга:
(?<=<noindex><a\ href=").*(?="\ title) (?<=alt=").*(?="></a>) ссылка
(?<=alt=").*(?="></a>) название
(?<=<b>Артикул:\ </b>).*(?=&nbsp;&nbsp;&nbsp;-) артикул
(?<=\ \ \ \ \ \ \ \ \ \ \ \ <span>).*(?=\.-</span>) цена
каждой регуляркой отдельно парсите данные, в своем экшене..
и потом переменные с разделителем записываете строкой в файл name.csv..
 
Что то далеко уйти не получается, максимум до чего дошел это http://prntscr.com/80ro8x
Вы говорите что можно парсинг делать одной строкой, а не подскажите как можно несколько регулярных выражений отделить друг от друга чтобы результат их работы выводился в текстовый файл в виде "ссылка название артикул цена"

Привожу регулярные выражения которые составил для парсинга:
(?<=<noindex><a\ href=").*(?="\ title) (?<=alt=").*(?="></a>) ссылка
(?<=alt=").*(?="></a>) название
(?<=<b>Артикул:\ </b>).*(?=&nbsp;&nbsp;&nbsp;-) артикул
(?<=\ \ \ \ \ \ \ \ \ \ \ \ <span>).*(?=\.-</span>) цена
Результат парсинга каждой регулярки нужно складывать в соотв. переменную, например, Variable.link, Variable.price и т.д.
А затем добавлять в таблицу такой строкой - Variable.link; Variable.name;Variable.price;
В качестве разделителя столбцов выбрать ;
Так при парсинге все ляжет по столбцам.
 
Вам либо парсить по одному совпадению и потом увеливая счетчик пока не спарсите всю страницу.
ссылк1;название1;артикул1;цена1

потом увеливаете номер совпадения в регулярках при помощи увеличения счетчика и парсите уже
ссылка2;название2;артикул2;цена2

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

а так - да, изначально нужно было с сайта прямо сразу формировать CSV-файл..
 
Последнее редактирование:
можно еще сделать так, что с начало все спарсить в списки, а потом определив длинну списков сделать цикл, открывать каждый список по номеру и сохранять в нужно последовательность в файл через разделитель.
 
Добрый всем день и спасибо большое всем за ответы, пока пробую по ним проводить различные танцы с бубном.
Возник вопрос, что дает функция отмеченная красными стрелочками http://prntscr.com/810tba
 
это я понимаю, я думал что если туда ввести регулярное выражение он будет сохранять результаты его работы в отдельные столбцы и/или строки, но такого не происходит, а что оно позволяет там сделать?
 
это я понимаю, я думал что если туда ввести регулярное выражение он будет сохранять результаты его работы в отдельные столбцы и/или строки, но такого не происходит, а что оно позволяет там сделать?
это если разделители не одного типа, можно по регулярке отслеживать несколько типов разделителей..
 
это я понимаю, я думал что если туда ввести регулярное выражение он будет сохранять результаты его работы в отдельные столбцы и/или строки, но такого не происходит, а что оно позволяет там сделать?
Это выбор разделителя. Свой разделитель можно указать как текст или как регулярное выражение. Например, регулярное выражение \s - означает, что в качестве разделителя в таблице будет пробел.
 
В итоге толком не вышел к тому чтоб в таблицу нормально заносить данные. Только вариант выгрузить список каждых значений в отдельный файл, а потом уже руками объединять в экселе через экспорт данных.
Странно как то получается, вроде такую простую функцию выполнить надо, а реализация очень неудобная.
По крайней мере для меня, человека далекого от программирования.
 
В итоге толком не вышел к тому чтоб в таблицу нормально заносить данные. Только вариант выгрузить список каждых значений в отдельный файл, а потом уже руками объединять в экселе через экспорт данных.
Странно как то получается, вроде такую простую функцию выполнить надо, а реализация очень неудобная.
По крайней мере для меня, человека далекого от программирования.
реализацию вам подсказывали уже, ничего сложного..
у вас есть несколько регулярных выражений, вы ими парсите информацию с сайта, заносите их в отдельные списки-файлы, вот на последнем шаге как раз, нужно не в разные файлы заносить информацию, а в один-единственный - экшеном Операции над списком вы добавляете строку из ваших всех переменных (в нужной последовательности), разделенных знаком ; (точка с запятой)..
на выходе получаете файл в формате CSV, единственно что - возможно потребуется переконвертирование файла из UTF-8 в WINDOWS-1251 (ANSI), чтобы содержимое кириллицы нормально отображалось в Excel..
 
  • Спасибо
Реакции: greenvipe и VladZen
реализацию вам подсказывали уже, ничего сложного..
у вас есть несколько регулярных выражений, вы ими парсите информацию с сайта, заносите их в отдельные списки-файлы, вот на последнем шаге как раз, нужно не в разные файлы заносить информацию, а в один-единственный - экшеном Операции над списком вы добавляете строку из ваших всех переменных (в нужной последовательности), разделенных знаком ; (точка с запятой)..
на выходе получаете файл в формате CSV, единственно что - возможно потребуется переконвертирование файла из UTF-8 в WINDOWS-1251 (ANSI), чтобы содержимое кириллицы нормально отображалось в Excel..

Тоже самое объяснял... Ничего сложного тут нет, никакого программирования не требуется.
Результат парсинга каждой регулярки нужно складывать в соотв. переменную, например, Variable.link, Variable.price и т.д.
А затем добавлять в таблицу такой строкой - Variable.link; Variable.name;Variable.price;
В качестве разделителя столбцов выбрать ;
Так при парсинге все ляжет по столбцам.
 
в один файл тоже пробовал записывать, и перед записью в список добавлять строку с разделителем ; но он мне все равно все данные в один столбец закидывает вот как выглядит http://prntscr.com/81hanm
 
А может кто выложить пример как должен выглядеть текст в файле чтобы он разбивался по столбцам и строкам?
 
в один файл тоже пробовал записывать, и перед записью в список добавлять строку с разделителем ; но он мне все равно все данные в один столбец закидывает вот как выглядит http://prntscr.com/81hanm
Почему разделитель в начало, а не в конец списка добавляется?
 
пробовал и в начало и в конец, результат один, в таблице создается второй столбец с пустыми ячейками, только в одном варианте сделал в таблице данные в разных столбцах, если они хранятся в виде:
http://prntscr.com/81hrvd
т.е если данные записаны в одной строке через разделитель то они уже будут раскидыватся по столбцам как надо, и вроде этот вариант мне бы отлично подошел, но никак не могу понять как сделать так чтобы несколько регулярный выражений выполнялись одной строчкой кода, и между результатом их работы ставился знак ;
 
пробовал и в начало и в конец, результат один, в таблице создается второй столбец с пустыми ячейками, только в одном варианте сделал в таблице данные в разных столбцах, если они хранятся в виде:
http://prntscr.com/81hrvd
т.е если данные записаны в одной строке через разделитель то они уже будут раскидыватся по столбцам как надо, и вроде этот вариант мне бы отлично подошел, но никак не могу понять как сделать так чтобы несколько регулярный выражений выполнялись одной строчкой кода, и между результатом их работы ставился знак ;

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

Вложения

Спасибо большое!!! Шаблон очень помог, как до конца доделаю парсер выложу в виде шаблона, может тоже кому поможет.
 
  • Спасибо
Реакции: VladZen
Как и обещал выкладываю парсер, правда немного функционал не такой какой хотелось бы, переходит по страницам вплоть до сотни (ограничения счетчика), сделать так чтобы переходил только по страницам которые есть по факту так и не смог. Кому нужно подогнать под нужный сайт и переделать функционал думаю будет не сложно. Если есть чем дополнить, всегда рад предложениям.
 

Вложения

  • 003.xmlz
    003.xmlz
    89,5 KB · Просмотры: 534
  • Спасибо
Реакции: VladZen
сделать так чтобы переходил только по страницам которые есть по факту так и не смог
полагаю врядли актуально, но вдруг кому пригодится...

перед тем как ходить по страничкам сайта их (странички можно спарсить в список)
 

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)