• Нужна литература, статьи или сайты о парсинге сайтов на PHP (да и в целом о парсинге)?

    @Silm
    В названии диплома все же не хватает слова "Разработка универсального парсера сайтов на языке PHP".
    И слово "универсальный" думаю окажется лишним )

    Литературу на эту тему вряд ли найдете, статьи разрознены и разного качества. Ищите пробуйте. Очень рекомендую попробовать написать несколько парсеров на других языках. Посмотрите как работает библиотека Grаb для Python. Ее принципы можно перенести для PHP.

    Немного общей инфы по теме

    В целом парсинг сайтов состоит из примерно следующих этапов:
    • Анализ сайта: определение структуры сайта и шаблона данных и, на этом этапе полезным бывает изучить файл роботс, xml карту сайта, поиск по сайту, выдачу поисковиков для сайта.
    • Подготовка выражений (xpath или css селекторв) для получения необходимых данных со страниц.
    • Написание и отладка парсера.


    Сам парсер может состоять из следующих частей:
    • Краулер. Используя какие то правила проходит по страницам, собирает ссылки, может отправлять страницы сразу на парсинг (в очередь на парсинг) или просто выгружать и сохранять их целиком.
    • Парсеры. Блоки отвечающие за вытаскивание конкретных данных и их преобразование в нужный формат.
    • Вспомогательные сервисы, отвечают за разбор HTML DOM, кеширование, HTTP запросы, обход защиты от парсинга, сохранение данных в нужном формате и тп.


    Для разбора HTML используются библиотеки (пример https://github.com/Imangazaliev/DiDOM ). Регулярками HTML не разбирают, но тоже, конечно применяют для разбора других данных.
    Иногда требуется исполнять JS, например с помощью PhantomJS.
    Для обхода капчи прибегают к услугам сервесов типа антигейт / антикапча.
    Порой требуется авторизовываться или обходить защиту построенную на cookies.
    Для многопоточного парсинга используют multicurl.

    Вообще PHP не самый подходящий язык для парсинга сайтов. Все таки он предназначен для других целей. Python + Grab здесь будет куда удобнее и производительнее. Как, впрочем почти любой десктопный язык имеющий нужные библиотеки.
    Ответ написан
    2 комментария
  • Объективно рассчитать стоимость парсинга с HH, как?

    @megastudio
    Не для всех случаев имеет смысл брать деньги только за разработку. Вам нужно сюда еще добавить обслуживание + эксклюзив тоже может быть (я так понимаю, вы и будете хостить). Вы ж все таки на рынке находитесь. Почему за apple не берут пару сотен рублей? Если ваш продукт действительно тащит, то зачем собирать крохи. Договаривайтесь с клиентом выходите на комфортную для всех сумму.
    Ответ написан
    Комментировать
  • Выделенный сервер для установки "своего" windows server?

    Ziptar
    @Ziptar
    Дилетант широкого профиля
    Ну хетзнер тот же, им там всё равно что ты свои впски и дедики ставишь
    Ответ написан
    Комментировать
  • Выделенный сервер для установки "своего" windows server?

    @Drno
    В любом месте арендуешь сервак на месяц, где можно подключиться по KVM + смонтировать свой ISO образ
    Подключаешься по KVM - ставишь винду)
    Ответ написан
    4 комментария
  • Как копировать содержимое одного div и вставлять в другой div с помощью JS/JQ?

    devellopah
    @devellopah
    Если на чём-нибудь внутри sync1, например, на дивах, висят обработчики(а очень часто так и будет), то, в идеале, ты не просто хочешь скопировать содержимое, но и обработчики прихватить заодно.

    По-моему, в jquery это можно сделать примерно так:

    $('#sync1').clone(true).unwrap().appendTo('#sync2');


    или если нужно полностью заменить содержимое элемента

    $('#sync1').clone(true).unwrap().appendTo( $('#sync2').empty() );
    Ответ написан
    Комментировать
  • Как правильно рисовать дизайн по сетке bootstrap 3?

    xtala
    @xtala
    Постигает Дзен
    Не соглашусь с оратором-садистом который, предлагает какие то извращенные пытки из своего мрачно-красного воображения, методом отрыва рук.
    1) Дизайн это творчество, а не уголовный кодекс. Иногда дизайнеры любят нарушать правила.
    2) Бутстрап это всего лишь фреймворк, это не данность и не святые скрижали. Его можно использовать, а можно выкинуть на йух или на мороз. Или на мороз и на йух одновременно.
    3) Бутстрап гибок. Он настраивается. Его колонки тоже.
    4) Натягивать дизайн под какие-то колонки и догмы это натягивать сову на ежа.
    5) Если дизайнер слепо следует диктату колонок он не дизайнер, а школьник.
    6) Слепо диктату колонок следовать нельзя, но так же не следует забывать про элементарное здравомыслие. Например дизайнер может натыкать на глаз иконки с разной высотой по 2-3 пикселя. Тут стоит включить голову и сделать все выровненным по одной линии, если не оговорено иное.
    7) Из здравомыслия следует так же, что дизайн должен быть создан под популярные разрешения. Пожалуй это единственное требование из жанра уголовного кодекса к дизайнеру.
    Ну и решать, что правильно, а что нет только вам. Но лично я посоветую не загонять себя в рамки, а то придете к творческому вырождению и ступору в жанре "соцреализм", а когда вам будут присылать нестандартные макеты, будете стучать ботинком по столу и кричать:
    -- "Вы художники или п#%#сы проклятые? У меня внук лучше макеты делает!".
    Ответ написан
    Комментировать
  • Кто сталкивался с версткой такого типа макета?

    sfi0zy
    @sfi0zy Куратор тега CSS
    Creative frontend developer
    Забудьте... дизайнер просто демон... посылайте нафиг дизайнера...

    О да, люблю эти комментарии. Набросал тут небольшой прототип:


    В браузерах особо не проверял, только Chrome и FF, но вроде в современных должно работать.
    Ответ написан
    6 комментариев
  • Кому реально нужны правила по использованию cookie на сайте?

    @wadimko81
    Моё мнение, что этим сообщения о использовании кук, просто издевательство над посетителем, и владельцем сайта.

    На самом деле, в любом браузере, есть настройки безопасности.
    Есть так называемые уровни безопасности. При желании, пользователь может настроить свой браузер, таким образом, чтобы ему показывал сообщения именно его браузер о том, какие данные о нём собираются на данном сайте.

    При том, тут пугали разными версиями сайта, при разном сборе данных.
    Как раз, для браузеров, есть расширения, которые фильтруют содержимое страницы.
    Не загружают всё те же скрипты, Гугл аналитикс, и так далее. Всякие счётчики.
    Есть расширение, которое вообще отключает какие либо скрипты, либо определённые.

    Пользователь, если его беспокоит собственная безопасность, анонимность, может настроить это так, как ему нужно. При том, с различными уровнями, для различных сайтов. То есть, запретить определённым счётчикам собирать о себе данные, а определённым разрешить.

    На мой взгляд дело всё в том, что подобные вещи делаются, как бы это сказать.
    Для людей, с ограниченными умственными способностями в определённой области, которые по какой-то причине не считают необходимым настроить свой ПК так, как нужно.
    И на самом деле, подстройка по подобные гриппы лиц весьма неприятная тенденция и в чём-то опасная.

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

    На самом деле, если кого-то, на самом деле, из тех, кто разрабатывает и продвигает подобные вещи, заботит безопасность конфиденциальности граждан своей страны, то имело бы более действенно прописать немного другие механизмы. А именно. Например, для локализованной под определённую страну, то есть язык, браузер. Ну к пмриеру, когда пользователь устанавливает на свой ПК Оперу, выбирает при установки язык, чтобы вместе с этим, автоматически прописывались настройки по умолчанию по информировании пользователя о том, какие данные о нём собираются.
    То есть, пользователь установивший Оперу, на французиком, при посещении любого сайта, будет получать такое же сообщение, как сейчас, не на размытое, а конкретное, о том, какие данные переданы, какие крипты запущены, какая информация о нём собиралась, и какой именно файл записан, где он находится на его ПК. Кнопку удалить, принять и так далее.
    Чтобы это можно было отключить, и настроить по желанию пользователя.
    На самом деле, это можно сделать и сейчас, при желании. Но суть проблемы, чтобы было включено по умолчанию, и при желании можно было отключить.

    А отображения окошка на сайте, которое не кто не читает, и нажимает “ОК”
    Это, какое-то, не знаю, похоже на бутафорию и издевательство.

    Про слежку за пользователями через куки, а как же лог сервера?
    Получается, лог сервера, программы его обработки, тоже своего рода слежка.
    При том, от этого уже не откажешься не как.

    Когда пользователь, пользуется чем-то, например тем же ПК, он для пользования этим, должен иметь определённый набор навыков и знаний.
    Но почему-то, в капиталистическом обществе, стала развиваться опасная тенденция, подстраиваться под группу людей, которая не считает нужным получать какие либо навыки. И это негативно сказывается на тех, кто имеет такие навыки и хочет их улучшить. Как пример, всё с тем же удалением возможности отключить скрипты в файрфоксе.
    Да и вообще, интерфейс многим программ в последнее время становится своеобразным.

    На самом деле, браузеров, которым пользуются люди, можно сказать около 10 шт.
    Файрфокс, Опера, Хром и так далее. Обязать прописывать там настройки безопасности по умолчанию, в 10 программах, гораздо эффективнее, чем на все сайты, вешать таблички, которые не кто не читает.

    Тему эту ещё можно продолжить в данном русле, но и так много текста.
    Специально зарегистрировался, чтобы ответить на этот вопрос.
    Всё написанное, это личное мнение, на истину не претендует.

    На вопрос, кому это нужно, вероятно тем, кому выгодно создавать проблемы людям.
    Вероятно какой-то способ подавить конкурентов, какими-то требованиями.
    Ничего общего с заботой о людях, это на практике, как кажется не имеет.
    p.s Если некая программа, загружает массив данных на ваш пк...
    Сработает файрвол, правила доступа к папкам, правила учётной записи, на установку программ, сработает файрвол, антивирус, и так далее.
    Ответ написан
    1 комментарий
  • Как организовать процесс web-разработки?

    @roman_gorevoy
    Исполнительный директор "Евросайты"
    На самом деле конфигураций много и разнятся в зависимости от уровня новичка и его желании потратить время на подготовку. Общие принципы такие:

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

    GIT на всех площадках для удобной работы. Обязательно удалённый репозиторий, на мой вкус лучше GitLab или BitBucket, GitHub для приватных проектов не выгоден и не удобен.

    Параллельно подтяните Bash команды.

    Среда разработки (IDE). Тут на выбор много чего есть. Самые популярные это PHPStorm (платный) и NetBeans. Если ничего не понравилось из этого, то можно посмотреть в сторону Visual Studio Code, это не прямо полноценная IDE, но тоже вполне себе редактор, для новичка может быть самое то. К тому же он бесплатен. Всякие Atom и Sublime не советую.

    Новичку можно начать с этого, далее желательно идти в сторону Continuous Integration и изучения общепринятых стандартов разработки.

    И немного не по теме, но всё же - очень полезно новичку будет начать прививать себе умение писать нормальный код. В случае PHP обязательно изучить PHPDoc и сразу начать его использовать, PSR(минимум 1-2-4), и основы проектирования (что такое MVC, MVP и пару основных паттернов, типа Singleton)

    Основы работы с Git можно получить в статье, где в удобном формате продемонстрированы все основные git команды с примерами
    По всем bash командам можно читать статьи на этом ресурсе
    Ответ написан
    Комментировать
  • Какие проблемы решает качественный дизайн сайта?

    webinar
    @webinar Куратор тега Веб-разработка
    Учим yii: https://youtu.be/-WRMlGHLgRg
    Привлечение внимания

    Это про наружную рекламу, про баннеры, но никак не про сайт. Вот формирование снипетов для поисковой выдачи - можно считать привлечением внимания. А к дизайну это каким боком? Человек уже на сайте. Он уже где-то кликнул, по тому что привлекло его внимание. Уже на сайте.
    Больше клиентов (с мобильных устройств) благодаря адаптивному дизайну

    Тут вообще мимо. Меньший показатель отказов - допускаю. Но опять таки - "адаптивный дизайн" это вопрос верстки, при чем тут дизайн?

    А теперь как реально выглядит ответ на вопрос:
    Какие проблемы решает качественный дизайн сайта?

    - иммидж
    - снижение кол-ва отказов
    - увеличение конверсии
    остальные 15 пунктов, так или иначе будут просто следствием из этих трех.
    Ответ написан
    Комментировать
  • Какие проблемы решает качественный дизайн сайта?

    @Insayt
    Ну тут надо уточнить, что дизайн сайтов/приложений не является продуктом. Это услуга.
    "Картошка" - это продукт. "Доставка картошки" - это услуга. Вы предоставляете услуги, соответственно ставить вопросы надо исходя из понимая этого.

    Бизнес выбирает поставщика услуг по нескольким пунктам:
    1. Доступность - важно что бы было легко вас найти.
    2. Понимание проблем клиента - важно что бы поставщик услуг четко понимал как его деятельность скажется на нашем бизнесе.
    3. Скорость реакции сотрудников и их вежливость - тут думаю все понятно, если на email отвечают неделями и на от*бись, то такой поставщик услуг не получит заказ.


    В контексте вашего вопроса речь идёт о "Понимании проблем клиента".
    И тут важнее не написать большой список, а выбрать конкретный пункт и давить на него. Объясню:

    1. Увеличение продаж - на этот пункт вы влияете очень косвенно (ниже объясню почему). Потребитель больше будет смотреть на цену и скорость доставки, чем на форму кнопочки "Перейти в корзину".
    2. Привлечение внимания - это тоже не ваша работа. Привлекают внимание маркетологи. Клиент даст рекламу в директ, и она будет привлекать внимание. Если вы занимаетесь дизайном рекламных баннеров, то тогда можно говорить о привлечении внимания, но в контексте вашей деятельности вы привлечением внимания к продукту/услуге заказчика не занимаетесь.
    3. Большая конкурентоспособность/отстройка от конкурентов - это тоже не про вас. Конкурентоспособность никак не соотносится с визуальной составляющей. Вы можете сделать идеальную упаковку для пиццы, но если её везут 3 часа, то никакой конкурентоспособности быть не может.
    Отстройка от конкурентов - это тоже не про вас. Немного погуглите про то что такое "отстройка от конкурентов", и поймете это. Отстраиваются на уровне позиционирования и бизнес процессов. Например вы открыли магазин продуктов возле дома. Через пол года рядом открывается пятерочка. Вы начинаете проседать по доходам, потому что пятерка дает лучшую выходную цену для клиента, и тогда вы решаете отстроится от конкурента, убираете весь ассортимент и становитесь магазином "Колбасы от Васи". И расставляете на прилавке 1 вид продукта, но в широком ассортименте, который пятерочка никак не может себе позволить, потому что им не выгодно иметь широкий ассортимент одной товарной позиции. Вот это и есть отстройка.

    А теперь к важному. Продавайте "Повышение конверсии". И только это.
    Бизнес делает рекламу, тратит на это деньги, и тут появляетесь вы и говорите, мы можем сделать новый дизайн вашего сайта, уменьшить "боль" потребителя от использования, что повысит вашу конверсию на N процентов + увеличит кол-во повторных заказов от существующих клиентов. Повышение конверсии даст большую эффективность вашим рекламным затратам, потому что вы можете потратить 100500 миллионов денег, но если вся реклама будет вести на непродуманный, некрасивый и абсолютно неюзабельный лендинг - ваши деньги вылетят в трубу. Такая постановка вопроса будет очень понятна любому бизнесу.

    Так что вывод - переимуйте абстрактный пункт "Увеличение продаж" в более конкретный "Увеличение конверсии", и продавайте его.
    Ответ написан
    1 комментарий
  • Как сделать регистрацию сайта в php через api?

    Процитирую ответ Anton B из вопроса Как использовать токены для аутентификации в API?

    1. Для авторизации пользователь вводит логинпароль, устройство отправляет их по https на account/auth
    2. account/auth выдает token (token_id:token_val) и secret
    3. все дальнейшие запросы устройство отправляет по http указывая token и подписывая запросы с помощью secret

    Как работает.

    Сервер получает запрос, видит что пришел token, разбивает его через двоеточие на input_id и input_val. Выбирает из базы токен с пришедшим input_id, получает из базы значение token_val и secret. Сравнивает input_val и token_val. Если в базе нашелся токен с нужным id и значения val равны, пришло время проверить достоверность запроса.

    Клиент помимо токена передал sign (подпись), которую сформировал так (например) secret+api_path+query_param. На стороне сервера вам известно api_path и api_param, а secret выбрали из базы. Хешировать подпись принято через hmac().

    Помимо токена и подписи можно передавать time и так же класть его в sign, и на стороне сервера отсекать запросы запросы которым больше 60 сек.

    Таким образом.

    Если кто то слушает ваш канал, он не сможет подделывать запросы (а значит компроментировать), и из-за проверки времени жизни запроса не сможет вечно получать данные по однажды перехваченного запроса.

    А в базе токены можете хранить пока клиент сам не запросит их уничтожения и сохранить время последного обращения через токен, и удалять токены которые не использовались более 60 дн.
    Ответ написан
    Комментировать
  • Как удалить не используемые стили из CSS файла?

    @sergikzv
    Для gulp и grunt есть плагин uncss вроде, автоматом при сборке будет чистить.
    Ответ написан
    Комментировать
  • Как вывести данные php скрипта в модальное окно?

    ilyachase
    @ilyachase
    web-developer
    Видно, что подключен jQuery, при это вы используете ajaxSubmit(), хотя, насколько я знаю, в стандартном jQuery его нет (видимо, это какой-то плагин?). В jQuery для этих целей есть ajax(), а у него, в свою очередь есть callback-функция success(), которая может принимать ответ сервера. Судя по коду, в плагине, который вы используете, тоже есть что-то подобное (функция success в "коде скрипта").
    Как бы это выглядело с использованием встроенного функционала jQuery:
    1. Вы отправляете запрос на сервер.
    2. Получаете ответ (success: function(data), где в data - ответ сервера).
    3. Выводите ответ сервера в необходимый элемент. В случае вашей разметки это может быть "modal-content", тогда будет выглядеть так - $(".modal-content").html(data);

    Обратите внимание, что делать $(".modal-content").html(data) - плохая практика, так как у вас на странице может быть не один элемент с этим классом. Лучше присвоить блоку, в который будете выводить результат id и обращаться к нему через $("#...").
    Ответ написан
    4 комментария
  • CMS своими руками

    @egorinsk
    Автор, а что гуглить. Есть минимум 3 способа: расковырять простую Open-Source CMS (проблема: найти CMS с хорошей архитектурой и аккуратным кодом), устроиться в компанию, у которой есть своя CMS (а она есть почти у каждой студии), и наконец, написать самому правильно.

    Маны нужны не по написанию CMS, а по используемым продуктам и технологиям.

    Сначала надо определиться с задачей. Установите и попользуйтесь несколькими CMS, просто чтобы увидеть особенности их работы. (если вы не можете это сделать — вам надо изучать основы установки и настройки apache/mysql/whatever, а не CMS писать. Уходите практиковать эти навыки). Также, есть хороший сайт, где установлены демки десятков CMS и можно их посмотреть, не устанавливая.

    Запишите, что вы хотите получить, сделайте наброски страниц. Определитесь с требованиями к вашей CMS. Какие в ней будут модули, как ими можно управлять.

    CMS обычно состоит из 2 частей — т.н. «админки» (запароленный раздел, где меняется конфигурация сайта, добавляются материалы) и публичной части сайта, которую видят пользователи.

    Если вы еще не бросили эту затею, перейдем к следующему пункту. Проектирование архитектуры и написание CMS. Чтобы хорошо писать сложную CMS, нужен опыт и понимание того, как вообще писать сложные программы. Нужно глубокое знание HTTP/HTML/CSS/JS/SQL. А именно:

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

    Что еще надо знать. Во-первых, надо иметь представление что значит MVC или 3-звенная архитектура.

    M в MVC — это Model. CMS скорее всего будет хранить данные в БД — надо знать, что такое и как пишется DBAL (гуглите: PDO), плейсхолдеры в запросах, возможно, Table Gateway, ознакомиться с тем, что такое ORM, и почему PHP-ные ORM так тормозят. Если будете делать модельки, не храните значения полей в публичных свойствах — это неудобно и нарушает инкапсуляцию. Храните их в приватном массиве $attributes.

    V is for View. Надо знать, что такое шаблонизаторы (прочтите мануал по Smarty, Django Templates, HAML и XSLT, чтобы иметь общее представление, какие они бывают). Для PHP хорошие варианты — использовать чистый PHP или XSLT, если осилите. Smarty — устаревший тормозной хлам, Twig тоже имеет недостатки. И не стоит ставить шаблонизатор, только, чтобы писать {$a} вместо [?= $a =].

    Не смешивайте логику (сложные вычисления, обращение к БД) и шаблонизацию. Лучше сделайте 2 файла: один с кодом, другой с шаблоном. В идеале, шаблонизатор получает от контроллера значения переменных и, кроме хелперов, никакого другого кода не вызывает.

    C — контроллеры. Но это самая простая часть, контроллер — это просто класс с методами типа viewAction(), editAction() и роутер, который смотрит на УРЛ и вызывает нужный контроллер. Посмотрите, как устроен Zend_Controller и Zend_Front_Contriller, и сделайте так же, но попроще. выкинув 90% функционала — он вам не понадобится.

    Нужно как-то сделать систему компонентной без сильных связей: чтобы ядро могло работать и без модулей, а добавление модуля не требовало дописывания кода в ядро. Почитайте про Dependency Injection, а также Observer (observer — это когда мы делаем функцию addEventListener()).

    Не используйте хуки, как в Друпал. Это дурной и порочный путь, взятый видимо из древных времен и программирования на Си.

    Что еще. Освоив все эти понятия, у вас в принципе не будет сложностей написать CMS, но почитайте еще мои советы по тому, как писать правильный код с исп. ООП: habrahabr.ru/qa/17158/#answer_70869

    Написание своих велосипедов, в общем, полезно и способствует расширению кругозора разработчика, заставляет его изучать разные подходы к написанию кода.

    Ну что еще. Если (в чем я сильно сомневаюсь) благодаря моему скромного совету вы все же сможете пройти этот нелегкий путь и станете успешным разработчиком, можете заплатить мне денег. Я не против.
    Ответ написан
    Комментировать