Карта сайта (Wiki) - это XML-файл с информацией для поисковых систем (таких как Яндекс, Google, Bing, Поиск@Mail.Ru) о страницах веб-сайта, которые подлежат индексации. Он помогает поисковикам более разумно индексировать сайт. Некоторые SEO-специалисты считают отсутствие такой карты грубейшей ошибкой. В интернете существует очень много сервисов и инструментов для создания таких карт, а также для их валидации. Мы же попробуем создать карту сайта с помощью A-parser. Итак, посмотрим, что конкретно нам нужно делать. Проверяем все внутренние ссылки на обрабатываемом сайте. Узнать все необходимые параметры для каждой ссылки. Сохраняем всю эту информации в файле sitemap.xml. Протокол sitemap описан на сайте sitemaps.org. Для решения этой задачи нам прекрасно подойдет парсер HTML::LinkExtractor. Он умеет собирать ссылки из сайта на указанную глубину и возвращать заголовки ответа сервера (где обычно содержится дата последнего изменения). За вывод результата будет отвечать шаблонизатор Template Toolkit, который будет формировать правильный вид итогового файла. Ну что же, вот само задание. Спойлер: Код для импорта Код: eyJwcmVzZXQiOiJzaXRlbWFwIiwidmFsdWUiOnsicHJlc2V0Ijoic2l0ZW1hcCIs InBhcnNlcnMiOltbIkhUTUw6OkxpbmtFeHRyYWN0b3IiLCJkZWZhdWx0Iix7InR5 cGUiOiJvcHRpb25zIiwiaWQiOiJwYXJzZUxldmVsIiwidmFsdWUiOjN9LHsidHlw ZSI6Im92ZXJyaWRlIiwiaWQiOiJmb3JtYXRyZXN1bHQiLCJ2YWx1ZSI6Ijx1cmw+ XFxuPGxvYz5bJSBxdWVyeSB8IHhtbCAlXTwvbG9jPlslIElGIGxtWWVhciAhPSAn bm9uZScgJV1cXG48bGFzdG1vZD4kbG1ZZWFyLVslIFNXSVRDSCBsbU1TdHJpbmcg JV1bJSBDQVNFICdKYW4nICVdMDFbJSBtPScwMScgJV1bJSBDQVNFICdGZWInICVd MDJbJSBtPScwMicgJV1bJSBDQVNFICdNYXInICVdMDNbJSBtPScwMycgJV1bJSBD QVNFICdBcHInICVdMDRbJSBtPScwNCcgJV1bJSBDQVNFICdNYXknICVdMDVbJSBt PScwNScgJV1bJSBDQVNFICdKdW4nICVdMDZbJSBtPScwNicgJV1bJSBDQVNFICdK dWwnICVdMDdbJSBtPScwNycgJV1bJSBDQVNFICdBdWcnICVdMDhbJSBtPScwOCcg JV1bJSBDQVNFICdTZXAnICVdMDlbJSBtPScwOScgJV1bJSBDQVNFICdPY3QnICVd MTBbJSBtPScxMCcgJV1bJSBDQVNFICdOb3YnICVdMTFbJSBtPScxMScgJV1bJSBD QVNFICdEZWMnICVdMTJbJSBtPScxMicgJV1bJSBFTkQgJV0tJGxtRGF5PC9sYXN0 bW9kPlxcbjxjaGFuZ2VmcmVxPlslIFVTRSBkYXRlO2NhbGMgPSBkYXRlLmNhbGM7 RGQgPSBjYWxjLkRlbHRhX0RheXMobG1ZZWFyLG0sbG1EYXksIGRhdGUuZm9ybWF0 KGRhdGUubm93LCAnJVknKSxkYXRlLmZvcm1hdChkYXRlLm5vdywgJyVtJyksZGF0 ZS5mb3JtYXQoZGF0ZS5ub3csICclZCcpKSAlXVslIElGIERkID09IDAgJV1ob3Vy bHlbJSBFTkQgJV1bJSBJRiBEZCA9PSAxICVdZGFpbHlbJSBFTkQgJV1bJSBJRiBE ZCA+IDEgYW5kIERkIDwgMzAgJV13ZWVrbHlbJSBFTkQgJV1bJSBJRiBEZCA+PSAz MCBhbmQgRGQgPCAzNjUgJV1tb250aGx5WyUgRU5EICVdWyUgSUYgRGQgPj0gMzY1 ICVdeWVhcmx5WyUgRU5EICVdPC9jaGFuZ2VmcmVxPlslIEVORCAlXVxuPHByaW9y aXR5PlslIElGIHF1ZXJ5Lmx2bCA9PSAwICVdMVslIEVMU0UgJV1bJSBVU0UgTWF0 aDsgTWF0aC5pbnQoMTAgLyAocXVlcnkubHZsICsgMSkpIC8gMTAgKyAwLjMgJV1b JSBFTkQgJV08L3ByaW9yaXR5PlxuPC91cmw+XFxuIn0seyJ0eXBlIjoidW5pcXVl IiwicmVzdWx0IjpbImludGxpbmtzIiwibGluayJdLCJ1bmlxdWVUeXBlIjoic3Ry aW5nIiwidW5pcXVlR2xvYmFsIjpmYWxzZX0seyJ0eXBlIjoiZmlsdGVyIiwicmVz dWx0IjoiaGVhZGVycyIsImZpbHRlclR5cGUiOiJyZW1hdGNoIiwidmFsdWUiOiJ0 ZXh0XFwvaHRtbHxhcHBsaWNhdGlvblxcL3htbCIsIm9wdGlvbiI6ImlzIn0seyJ0 eXBlIjoiY3VzdG9tUmVzdWx0IiwicmVzdWx0IjoiaGVhZGVycyIsInJlZ2V4Ijoi bGFzdC1tb2RpZmllZDouKz8oXFxkezEsMn0pLj8oXFx3ezN9KS4/KFxcZHs0fSki LCJyZWdleFR5cGUiOiIiLCJyZXN1bHRUeXBlIjoiZmxhdCIsImFycmF5TmFtZSI6 IiIsInJlc3VsdHMiOlsibG1EYXkiLCJsbU1TdHJpbmciLCJsbVllYXIiXX1dXSwi cmVzdWx0c0Zvcm1hdCI6IiRwMS5wcmVzZXQiLCJyZXN1bHRzU2F2ZVRvIjoiZmls ZSIsInJlc3VsdHNGaWxlTmFtZSI6InNpdGVtYXAueG1sIiwiYWRkaXRpb25hbEZv cm1hdHMiOltdLCJyZXN1bHRzVW5pcXVlIjoibm8iLCJxdWVyeUZvcm1hdCI6WyIk cXVlcnkiXSwidW5pcXVlUXVlcmllcyI6dHJ1ZSwic2F2ZUZhaWxlZFF1ZXJpZXMi OmZhbHNlLCJpdGVyYXRvck9wdGlvbnMiOnsib25BbGxMZXZlbHMiOmZhbHNlLCJx dWVyeUJ1aWxkZXJzQWZ0ZXJJdGVyYXRvciI6ZmFsc2V9LCJyZXN1bHRzT3B0aW9u cyI6eyJvdmVyd3JpdGUiOnRydWV9LCJkb0xvZyI6Im5vIiwia2VlcFVuaXF1ZSI6 Ik5vIiwibW9yZU9wdGlvbnMiOnRydWUsInJlc3VsdHNQcmVwZW5kIjoiPD94bWwg dmVyc2lvbj1cIjEuMFwiIGVuY29kaW5nPVwiVVRGLThcIj8+XG48dXJsc2V0IHht bG5zPVwiaHR0cDovL3d3dy5zaXRlbWFwcy5vcmcvc2NoZW1hcy9zaXRlbWFwLzAu OVwiPlxuIiwicmVzdWx0c0FwcGVuZCI6IjwvdXJsc2V0PiIsInF1ZXJ5QnVpbGRl cnMiOltdLCJyZXN1bHRzQnVpbGRlcnMiOltdLCJjb25maWdPdmVycmlkZXMiOltd fX0= Примечания: не каждый сервер и не для каждой страницы возвращает заголовок last-modified; в зависимости от наличия заголовка last-modified для текущей ссылки будут (или нет, если данный заголовок не вернулся) описаны параметры <lastmod> и <changefreq>; <changefreq> рассчитывается на основе периода времени, прошедшего с момента последнего изменения страницы; <priority> рассчитывается в зависимости от глубины страницы; глубина сбора ссылок регулируется параметром Parse to level; не рекомендуется ставить большую глубину, т.к. ограничение в одном sitemap.xml 50000 URL. В конечном результате карта сайта выглядит так:
Здравствуйте! Работаю с примером http://a-parser.com/threads/1711/, получил много ссылок вида http://site.ru/forumdisplay.php?s=dfkfhdkhfkhd&f=36 и ссылки с мемберами в таком же виде, . Все ссылки открываются только убрав хвост с ; включительно. Но вопрос не в этом, это можно решить регулярками. Каким-то образом можно получить иерархию ссылок в виде дерева с разделами, подразделами, а не общей кучей? В результате уже около млн ссылок, а процесс парсинга еще не закончен. В идеале получить карту как в программах SG. Их минус во много раз медленной работе, чем А-Парсер
Добрый день. Применяйте к ссылкам Конструктор результатов - Decode HTML entities для преобразования & в & Да, можно, вот пример: http://a-parser.com/threads/1880/
Спасибо, пытаюсь настроить регулярные выражения для парсинга vBulletin. Пока делаю по Вашим настройкам. Буду благодарен, если поможете разобраться. Сложности: У меня получилось 2регулярки для forumdisplay <a href="([^"]+)"><strong>(.+?)</strong></a> и <a href="([^"]+)" id="([^"]+)" style="([^"]+)">(.+?)</a> для showthread. Скорее всего далеки до идеала, мои первые подобные регулярки. Мемберы мне пока не интересны. Нужна карта, чтобы по ней потом ходить. Не понял пока, как объединить эти регулярки и применить ваш парсет. По парсингу: Но текущее время парсинга результатов более 7млн, но в файле sitemap.xml менее 800 000 строк.
Непонятно о чем речь: о карте сайта по примеру http://a-parser.com/threads/1711/, или о дереве категорий, как в http://a-parser.com/threads/1880/ ?
В примере логика работы описана. Изучите детально пример, чтобы разобраться как это работает. А дальше по аналогии делайте для вашего сайта.
Прокомментируйте еще пожалуйста если нужно, добавлю свой парсет, но он точная копия примера из темы, только ссылка другая
Это особенность работы этого пресета. Общее кол-во результатов - это общее кол-во найденных ссылок, кол-во уникальных результатов - кол-во ссылок после уникализации. А в файле результата кол-во строк вообще не будет соответствовать ни одному из этих чисел, т.к. на каждую ссылку выводится несколько строк, и каждая ссылка выводится в результат только после того, как парсер по ней перейдет. Соответственно, на последнем уровне глубины, парсер получит внутренние ссылки и они отобразятся в общем кол-ве результатов, но в файл результата они уже не попадут, т.к. парсер по ним не перейдет, потому что это последний уровень.
Скажите пожалуйста, а как сделать чтобы в sitemap конечный результат, были записаны ссылки только третьего уровня?
Просто добавьте еще один фильтр: P.S. Для того, чтобы источник фильтра задать query.lvl, нужно выбрать Custom template и вписать переменную.
Хорошее видео https://a-parser.com/threads/2345/ , на основе пресета http://a-parser.com/threads/1711/ можно составить турбо страницы для яндекса, всего лишь прикрутив HTML::TextExtractor (тут подымалась тема https://a-parser.com/threads/4733/ как то там тихо). Если составлять задание, прикручивая второе задание. Приходиться выбирать второй парсер и собирать задание по новому. Есть в планах реализации добавления в задание второго готового задания, смежного в выполнении задачи?
Не совсем понятно, о чем именно речь. Если вы хотите запускать второе задание сразу после окончания работы первого, то можно использовать Цепочки заданий: https://a-parser.com/threads/2267/#post-7326 (пример использования: https://a-parser.com/resources/146/) Если же вопрос заключается в том, чтобы использовать в одном задании несколько парсеров, то такая возможность есть: https://a-parser.com/wiki/several-parsers/
Да, есть такая возможность задания добавлять. Но их приходиться переписывать, было бы неплохо добавлять уже готовое задание не переписывая его.