Ищу специалиста для проекта doleti.com У меня самописный движок на базе фреймворк yii (1,16) - Нужно сделать следующие доработки: 1. Сделать что бы все урлы были в английском переводе 2. ...
Добавление сайтов в парсер
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.
Здравствуйте!
Необходимо добавить в парсер вакансий 850 сайтов на разных языках. Для выполнения задания необходимо знать php (как минимум регулярки) и понимать что такое Css-selector. Иначе даже браться не стоит. Работа, примерно, на месяц, может больше. В списке есть сайты на одинаковых движках - это облегчит работу. Оплата по среднему курсу ЦБ России на день начала сотрудничества и окончания работы.
В архиве список всех сайтов разделенных по странам. Далее небольшое пояснение по добавлению сайта на примере.
Итак, инструкция на примере добавления сайта Careerbuilder.com.
Для начала, идем на наш сайт. У нас запросит авторизацию, вводим admin admin и кликаем "Войти".
Кликаем "Сайты" в верхнем меню, затем "Добавить сайт". Заполнение по пунктам:
1. Имя сайта - пишем сюда любое название, дабы мы потом могли найти сайт. Введем "Careerbuilder.com". Если нужно будет, например, разделить один и тот же сайт на два сайта по разным странам, то можно будет написать "Careerbuilder.com USA" и "Careerbuilder.com RUS" соответственно.
2. Ссылка - ссылка на страницу с вакансиями. В нашем случае это "http://www.careerbuilder.com/jobseeker/jobs/jobresults.aspx?qb=1&SB%3Asbkw=&SB%3As_freeloc=&SB%3Asbfr=3&sbsbmt=Find+Jobs&IPath=QHV&excrit=st%3Da%3Buse%3DALL%3BCID%3DUS%3BSID%3D%3F%3BTID%3D0%3BLOCCID%3DUS%3BENR%3DNO%3BDTP%3DDRNS%3BYDI%3DYES%3BIND%3DALL%3BPDQ%3DAll%3BPDQ%3DAll%3BPAYL%3D0%3BPAYH%3Dgt120%3BPOY%3DNO%3BETD%3DALL%3BRE%3DALL%3BMGT%3DDC%3BSUP%3DDC%3BFRE%3D30%3BCHL%3DAL%3BQS%3Dsid_unknown%3BSS%3DNO%3BTITL%3D0%3BOB%3D-relv%3BJQT%3DRAD%3BJDV%3DFalse%3BSITEENT%3DUSJob%3BMaxLowExp%3D-1%3BRecsPerPage%3D25&cid=US&findjob=sb"
3. Количество потоков - т.к. парсер открывает вакансии в многопоточном режиме, то необходимо задать количество потоков. Грубо говоря, это количество вакансий, обрабатываемых в секунду. Рекомендую ставить не больше 5-10, иначе некоторые вакансии не будут открываться. Это можно отрегулировать, ибо неоткрытые вакансии будут добавляться в ошибки. Выставим 10.
4. Количество вакансий в день - количество новых вакансий, которые обработаются за один запуск. Т.к. мы будем запускать обработку сайтов по крону раз в день, то можно считать, что это количество новых вакансий в день. Выставим 20.
5. Css-selector ссылки на вакансию - css selector ссылок на вакансию. Важно, чтобы он ссылался на a элемент, ибо ссылка берется из href аттрибута. Открываем страницу, видим, что у ссылки есть класс "prefTitle", который встречается только у неё. Задаем значение ".prefTitle". В случае, если будет id, то вместо знака "." будет знак "#".
6. GET-ключ страницы - название поля для следующей страницы, которое нужно взять из URL-а. Самый простой вариант - кликнуть "NEXT PAGE", взять URl, кликнуть еще раз, взять еще один URL, сравнить. Взяв два URL-а "http://www.careerbuilder.com/jobseeker/jobs/jobresults.aspx?excrit=st%3dA%3buse%3dALL%3bCID%3dUS%3bSID%3d%3f%3bTID%3d0%3bLOCCID%3dUS%3bENR%3dNO%3bDTP%3dDRNS%3bYDI%3dYES%3bIND%3dALL%3bPDQ%3dAll%3bPDQ%3dAll%3bPAYL%3d0%3bPAYH%3dGT120%3bPOY%3dNO%3bETD%3dALL%3bRE%3dALL%3bMGT%3dDC%3bSUP%3dDC%3bFRE%3d3%3bCHL%3dAL%3bQS%3dSID_UNKNOWN%3bSS%3dNO%3bTITL%3d0%3bOB%3d-relv%3bJQT%3dRAD%3bJDV%3dFalse%3bSITEENT%3dUSJOB%3bMaxLowExp%3d-1%3bRecsPerPage%3d25&pg=2&IPath=ILV" и "http://www.careerbuilder.com/jobseeker/jobs/jobresults.aspx?excrit=st%3dA%3buse%3dALL%3bCID%3dUS%3bSID%3d%3f%3bTID%3d0%3bLOCCID%3dUS%3bENR%3dNO%3bDTP%3dDRNS%3bYDI%3dYES%3bIND%3dALL%3bPDQ%3dAll%3bPDQ%3dAll%3bPAYL%3d0%3bPAYH%3dGT120%3bPOY%3dNO%3bETD%3dALL%3bRE%3dALL%3bMGT%3dDC%3bSUP%3dDC%3bFRE%3d3%3bCHL%3dAL%3bQS%3dSID_UNKNOWN%3bSS%3dNO%3bTITL%3d0%3bOB%3d-relv%3bJQT%3dRAD%3bJDV%3dFalse%3bSITEENT%3dUSJOB%3bMaxLowExp%3d-1%3bRecsPerPage%3d25&pg=3&IPath=ILV", видим, что меняется поле "pg=". Раз так, значит, GET-ключ будет равен "pg". В случае, если нет постраничного вывода, то оставляем это поле пустым. В нашем случае, вводим "pg".
Введя всё необходимое, нажимаем "Добавить".
Сам сайт добавлен, теперь нужно добавить все необходимые поля. Кликаем "Поля" в верхнем меню, затем "Добавить поле".
Открываем любую вакансию, дабы было с чего смотреть. Например "http://www.careerbuilder.com/jobseeker/jobs/jobdetails.aspx?sc_cmp1=js_jrp_jobclick&APath=2.21.0.0.0&job_did=J3G6VP6T1RGFH4H384Z&showNewJDP=yes&IPath=ILV2A".
Для начала, добавим поле "Название вакансии":
1. Сайт - выбираем Careerbuilder.com
2. Название поля - "Название вакансии"
3. Название поля при выгрузке xml - "vac_name"
4. Css-selector поля - смотрим исходный код, видим, что у названия вакансии идет id "CBBody_JobTitle". Значит, указываем "#CBBody_JobTitle"
5. Номер элемента по счету - 1, т.к у нас всего один элемент с таким id и нам нужен первый.
6. Обработчик - по обработчикам более подробная информация в самом конце инструкции, с примерами. В нашем случае, нам нужно просто название вакансии, без зарплаты. Исходя из этого, можно сделать правило, что все символы после знака "$", включая этот знак, нужно убрать.
Можно воспользоваться заменой по регулярке, но легче будет взять Замена между двумя символами. В символы указываем "$#", замена оставляем пустым. В результате этого, все символы, начиная с $ и до конца текста будут стерты.
Поле "Название фирмы":
4. Css-selector - #CBBody_CompanyName
5. Номер элемента - 1
6. Обработчик - оставляем простой текст, т.к. ничего заменять нам не нужно.
Поле "Город":
4. Css-selector - он у нас один для двух полей - "Город" и "Штат", т.к. они оба находятся в одном элементе. #CBBody_Location
5. Номер элемента - 1
6. Обработчик - "Разбиваем на части". Т.к. город и штат у нас разделяет символ запятой, то в Разделитель мы пишем ",", а в номер части - 1, т.к город идет до запятой.
Поле "Штат":
4. Css-selector - он у нас один для двух полей - "Город" и "Штат", т.к. они оба находятся в одном элементе. #CBBody_Location
5. Номер элемента - 1
6. Обработчик - "Разбиваем на части". Т.к. город и штат у нас разделяет символ запятой, то в Разделитель мы пишем ",", а в номер части - 2, т.к штат идет после запятой.
Поле "Зарплата":
6. Обработчик - "Вставляем значение", поле css-selector и номер элемента пропадают. Просто оставляем пустое значение, т.к. нам не нужно значение.
Поле "Job Description":
4. Сss-selector - #pnlJobDescription
Поле "Job Requirements":
4. Css-selector - #CBBody_Requirements
Поле "Employment Type":
6. Обработчик - "Вставляем значение", в значение пишем "Full-Time"
Поле "Ссылка на ваканси":
6. Обработчик - "Вставляем значение", в значение пишем шорттэг {url}, который заменится на ссылку на вакансию.
Вроде всё. Пока, дабы было удобно тестировать, в списке всех сайтов будет кнопка "Запустить", как закончим - поставлю все на CRON-ы.
В админке работает фильтрация и сортировка, а так же можно посмотреть все вакансии. Экспорт сделал в два варианта - XML и CSV.
Теперь еще по обработчикам информация:
Для начала, разделителем является знак #, т.к. его крайне редко можно встретить в тексте.
1. Простой текст - полученный текст мы оставляем таким, какой он есть.
2. Замена символов - заменяем определенные символы\слова на другие.
Пример: на входе у нас текст "Это большой бурый медведь (он голоден)".
Цель: заменить большой бурый на маленький белый, а так же убрать все скобочки из текста.
В "заменяемые символы" пишем "большой#бурый#(#)", в замена "маленький#белый##".
Получаем - "Это маленький белый медведь он голоден".
3. Замена регуляркой - тут всё просто, создаем регулярное выражение, по которому будет идти замена.
Пример: на входе "Это медведь (голодный)".
Цель: убрать скобочки и все символы между ними, вместо них поставить гризли.
Регулярное выражение: (.+)
Замена: гризли
Результат: "Это медведь гризли".
4. Замена межу двумя символами - облегченный вариант регулярки, дабы вам не нужно было каждый раз составлять её.
Пример: на входе "Title name $1000$".
Цель: убрать знаки $ и всё, что между ними.
Символы: "$#$"
Замена: ""
Результат: "Title name"
5. Текст по регулярке - находим нужную часть текста по регулярному выражению.
Пример: на входе "This is my email"
Цель: получить e-mail из ссылки.
Регулярное выражение: "(?
Результат: [email protected]
6. Текст, находящийся между символов - получаем текст, который находится между двумя символами\словами
Пример: на входе "Logo "
Цель: получить ссылку на изображение.
Символы: "src='#'"
Результат: "http://image.ru/asdsds"
7. Разбиваем на части - разбиваем текст на части по нужным символам и получаем нужную часть.
Пример: на входе "Москва, Московская область, Россия".
Цель: получить страну.
Разделитель: ","
Номер части: "3"
Результат: "Россия"
8. Вставляем значение - полю будет присвоено нужное значение, а шорттэги будут заменены.
Цель: получить строку "Vacancy URL: http://vacancy/id/123"
Значение: "Vancy URL: {url}"
Результат: "Vacancy URL: http://vacancy/id/123"
Тонкости системы:
1. Определение окончания страниц. Долго думал, как для всех сайтов подряд определять, закончились ли страницы или нет. Реализовал оптимальный вариант, который сработает везде - при каждой новой странице идет проверка. Если хоть одна из вакансий встречалась на предыдущих страницах, то система это воспринимает как сигнал о том, что страницы кончились.
2. Получение и обработка полей. Поля первоначально получаются вместе со всем HTML-кодом внутри них. То-есть, если мы из строки "dsds" берем селектор #one, то до обработки значение будет "dsds", но перед вставкой в базу все HTML тэги убираются и лишние пробелы тоже.
Также реализовано в парсере:
1. Тестирование - для проверки правильности добавления сайта. С списке сайтов самая нижняя иконка, "протестировать". При клике прямо из браузера запустится проверка первых трех страниц, а затем первой попавшейся вакансии. Выводит количество обработанных страниц, количество спарсенных с них ссылок на вакансий по селектору и в таблице выводит имя поля => значение с вакансии.
2. Постраничные переходы - при добавлении\редактировании в самом низу галочку "GET-ключ страницы". Если стоит эта галка, то будет get-переход, иначе указываете шаблон, типа - "http://www.allcruisejobs.com/search/java/{PAGE}/", где {PAGE} автоматом заменится на текущую страницу.
3. Новое поле "Не парсить, если содержит" - если оно пустое, то все ссылки на вакансию будут браться. Если нет, то будет проверяться, есть ли в ссылке эта подстрока. Если есть - ссылка не будет добавляться в список ссылок. Это сделано для такого случая:
есть два типа ссылок. Такие http://www.recruit.net/directjob.html?query=job&location=&jobref=028E1D14E7966FEC
ведут на другие сайты, а такие: http://www.recruit.net/job/project-administrator_leederville,-wa_jobs/DDB47B467971B8DB
ведут на вакансию. Таким образом для этого сайта надо указать в данном поле: directjob.html
Но такой сайт или вообще один, или их единицы в базе.
Заявки фрилансеров
Похожие заказы
- $10Веб-программирование1 заявкаЗакрыт10 лет назад
- $500
ТЗ плагин платежки Payeer реферальная 3х уровневая система с критериями (регистрация по инвайту, отдать несколько рефералов – партнеру выше и тп) ...
Веб-программирование1 исполнительЗавершен10 лет назад Необходимо разработать приложение (может быть веб, может быть десктопным под Windows, если это уместно), которое будет делать следующее: - проверять почтовый ящик (ящик любой, создадим нужный и перенаправим туда письма. Проверять раз в пару ...
Веб-программирование1 исполнительЗавершен10 лет назад- $322
Требуются работы с сайтом интернет магазина на Битрикс. Оплата через БС. Натяжка дизайна на движок, настройка корзины, настройка расчета доставки ТК. Вообщем привести в рабочее состояние. И залить сайт на этот же ...
Веб-программирование4 заявкиЗакрыт10 лет назад - $10
Нужно переписать скрипт на сайте. JavaScript, api яндекс карт. Знающему JS - работы максимум на час.
Веб-программирование4 заявкиЗакрыт10 лет назад Здравствуйте Использую плагин mm_ddSelectDocuments для выбора документов, выводится это дело в tv параметре с названием prepodavateli так вот если я в документе вывожу этот параметр [*prepodavateli*] то результат вижу в виде id выбранных ...
Веб-программирование1 заявкаЗакрыт10 лет назадШаблон сайта уже установлен и частично заполнен. Необходимо заменить Логотип и цвета сайта — ПСД с шаблоном и цветами сайта — отрисован.Необходимо внести изменения на самом сайте. Нужен программист работающий с плагин ...
Веб-программирование1 заявкаЗакрыт10 лет назад- $20
1.Для одностраничного сайта (landing page) необходимо сделать форму для отправки сообщений (обратная связь). Визуально сама форма готова. Необходимо создать php обработчик и внедрить его в эту форму. Всего форм 2 шт. Одна появляется во всплывающем ...
Веб-программирование1 исполнительЗавершен10 лет назад Здравствуйте! На этом сайте http://demo.niko-web.ru/katalog-dverey/oniks/seriya-venetsiya нужно реализовать выбор цвета таким образам, чтобы при клике на цвет главная картинка менялось по цвету с перевязкой на корзину, пример как здесь http://www.za-door.ru/catalog/Zadoor/alu/20668/?color=18954 по цене жду предложений!
Веб-программирование2 заявкиЗакрыт10 лет назад