deltaone

Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: Если вкратце: Предназначен для извлечения и последующей обработки любой информации со страниц через regexp и вывода полученной информации через шаблоны (для этого используется движок шаблонов NVelocity). На текущий момент реализованы шаблоны вывода в RSS и простую таблицу. Конфигурация извлечения данных производится через подпрограму написанную на языке c# (используется рантайм компилятор CS-Script, c последующим кешированием откомпилированного). В принципе получилось так, что вы можете реализовать свой алгоритм извлечения данных из любой страницы, структура файла конфигурации позволяет добавлять свои функции и процедуры. Установка: 1. Переносим содержимое папки bin в папку scrappy в корне WSW 2. В букмарку подцепляется плагин https://github.com/deltaone/SCRAPPY/blob/master/bin/wsw-plugin Скриншот результата работы смотрите внизу страницы тут - https://github.com/deltaone/SCRAPPY Правила прописываются в файле c раширением .cs в каталоге 'rules', cначала идет маска адреса заключенная в "<[" и "]>" для задания маски можно использовать * и ?. Потом обязательной пролог: Код: public static Hashtable Process(string pageText, Hashtable v) { | а в конце обязательный эпилог: Код: внутри можете делать что хотите в пределах языка c#, вы вполне можете написать сколько угодно дополнительных фунций перед Код: public static Hashtable Process(string pageText, Hashtable v) | и вызывать их из основной. Для полного понимания того, что происходит - смотри файл 'bin\templates\processor.cs' в этот файл подставляется ваша подпрограмма и компилируется. Пример правил: Код: <[*www.spacegamejunkie.com*]> public static Hashtable Process(string pageText, Hashtable v) { // http://www.spacegamejunkie.com/ v["PageTitle"] = "Space Game Junkie"; v["PageDescription"] = "Playing Through Space Gaming's Past, Present and Future"; var rows = GetStringsByRegex(pageText, "(<article id=\"post-.*?</article>)", "$1"); v["PageTable"] = ExtractToHashtables(rows, new string[,] { { "image", "<img src=\"(.*?)\" class=", "$1"}, { "date", "class=\"post-date\">(.*?)</p>", "$1"}, { "link", "<h2 class=\"post-title\">\\s+<a href=\"(.*?)\" .*?title=\"(.*?)\"", "$1"}, { "title", "<h2 class=\"post-title\">\\s+<a href=\"(.*?)\" .*?title=\"(.*?)\"", "$2"}, { "description", "entry excerpt\">\\s*(.*?)\\s*</div>", "$1"}, }); return(v); } <[*www.avito.ru*bytovaya_elektronika*]> public static Hashtable Process(string pageText, Hashtable v) { // https://www.avito.ru/moskva/bytovaya_elektronika?view=list v["PageTitle"] = "Авито - электроника"; v["PageDescription"] = "Бесплатные объявления раздела бытовой электроники"; var rows = GetStringsByRegex(pageText, "(<div class=\"price\">.*?</span>\\s+</div>\\s+</div>)", "$1"); var table = ExtractToHashtables(rows, new string[,] { { "date", "<span class=\"date\">(.*?)</span>", "$1"}, { "link", "class=\"h3\">.*?href=\"(.*?)\".*?\">(.*?)</a>", "$1"}, { "title", "class=\"h3\">.*?href=\"(.*?)\".*?\">(.*?)</a>", "$2"}, { "category", "<span class=\"c.*?\">(.*?)</span>", "$1"}, { "cost", "^.*?<p>\\s+(.*?\\.)\\s+<", "$1"} }); foreach(var r in table) { r["description"] = "<b>" + r["title"] + "</b><br>Категория: " + r["category"] + "<br><i>Цена: {0}</i>".Place((string)r["cost"]); r["title"] = (r["title"] + " (" + r["category"] + ") " + r["cost"]).XmlEscape(); } v["PageTable"] = table; return(v); } | По поводу используемых переменных и функций смотри файл bin\readme P.S. Обновил основную страницу на гитхабе, там есть дополнительная информация ... P.P.S. Искал подобный инструмент - не нашел, если я что-то пропустил - ткните пальцем plz ... P.P.P.S. Прекрасно осознаю, что получилось не для всех, но предложите лучшую альтернативу (по крайней мере правила можно делать на заказ или обмениваться ими в этой теме + сделано все на гитхабе и правила можно будет обновлять коллективно в основной поставке) ... P.P.P.P.S. Если кто поможет причесать гитхабовское ридми на английском, буду очень благодарен ... | Всего записей: 207 | Зарегистр. 20-09-2001 | Отправлено: 12:01 20-03-2015 | Исправлено: deltaone, 12:53 20-03-2015 |
|