Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Здравствуйте!

Необходимо добавить в парсер вакансий 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://australia.recruit.net/search.html?query=job&location=&postdate=30&hitsPerPage=50&dedup=true&jobRef=&sortby=date&d=r&pageNo=1&f_company=&f_region=&f_location=&newjobs=false&filter_company=false&filter_agency=false&companysite_filter=false

есть два типа ссылок. Такие http://www.recruit.net/directjob.html?query=job&location=&jobref=028E1D14E7966FEC

ведут на другие сайты, а такие: http://www.recruit.net/job/project-administrator_leederville,-wa_jobs/DDB47B467971B8DB

ведут на вакансию. Таким образом для этого сайта надо указать в данном поле: directjob.html

Но такой сайт или вообще один, или их единицы в базе.

9 лет назад
mchuk
49 летГрузия
16 лет в сервисе
Был
год назад
  • Похожие заказы
  • $10

    Ищу специалиста для проекта doleti.com У меня самописный движок на базе фреймворк yii (1,16) - Нужно сделать следующие доработки: 1. Сделать что бы все урлы были в английском переводе 2. Пример как должна получиться одна из ссылок, "ареднда офиса в ...

    Закрыт
    9 лет назад
  • Необходимо разработать приложение (может быть веб, может быть десктопным под Windows, если это уместно), которое будет делать следующее: - проверять почтовый ящик (ящик любой, создадим нужный и перенаправим туда письма. Проверять раз в пару минут) - в ...

    Завершен
    9 лет назад
  • $322

    Требуются работы с сайтом интернет магазина на Битрикс. Оплата через БС. Натяжка дизайна на движок, настройка корзины, настройка расчета доставки ТК. Вообщем привести в рабочее состояние. И залить сайт на этот же хост, только на другое ...

    Закрыт
    9 лет назад
  • Здравствуйте Использую плагин mm_ddSelectDocuments для выбора документов, выводится это дело в tv параметре с названием prepodavateli так вот если я в документе вывожу этот параметр [*prepodavateli*] то результат вижу в виде id выбранных документов например 121,125 Как зная ...

    Закрыт
    9 лет назад
  • Шаблон сайта уже установлен и частично заполнен. Необходимо заменить Логотип и цвета сайта — ПСД с шаблоном и цветами сайта — отрисован.Необходимо внести изменения на самом сайте. Нужен программист работающий с плагин Cherry и язык .less

    Закрыт
    9 лет назад
  • $20

    1.Для одностраничного сайта (landing page) необходимо сделать форму для отправки сообщений (обратная связь). Визуально сама форма готова. Необходимо создать php обработчик и внедрить его в эту форму. Всего форм 2 шт. Одна появляется во всплывающем ...

    Завершен
    9 лет назад
  • Здравствуйте! На этом сайте http://demo.niko-web.ru/katalog-dverey/oniks/seriya-venetsiya нужно реализовать выбор цвета таким образам, чтобы при клике на цвет главная картинка менялось по цвету с перевязкой на корзину, пример как здесь http://www.za-door.ru/catalog/Zadoor/alu/20668/?color=18954 по цене жду предложений!

    Закрыт
    9 лет назад