• Установка собственных userscript в Opera и Google Chrome

    Установка собственных userscript в Opera и Google Chrome   В браузере Opera подключить собственные скрипты весьма просто. Создаем папку, закидываем туда свои .js файлы. Затем на вкладке нужного сайта кликаем правой кнопкой мыши, выбираем пункт меню настройки для сайта и  выбираем вкладку скрипты. В пункте Папка пользовательских скриптов JavaScript находим созданную папку. Вот и все. Скрипты автоматически будут загружены для соответствующем сайте. Единственное, что нужно помнить - это порядок их загрузки. Опыт показывает, что скрипты загружаются в алфавитном порядке. К примеру jquery.js будет загружен раньше чем user.js. Это нужно помнить, когда подключаете jQuery, если его еще нет (да, Вы не поверите, но есть еще сайты без jQuery). Еще один тонкий момент: скрипты будут загружены для всех страниц сайта, в том числе и для всех фреймов. И соответственно будут выполняться для всех фреймов. Чтобы скрипт выполнялся только в главном фрейме, я делаю так

    if(  !self.parent.frames.length ){
    // тут код
    }
  • Учимся парсить сайты с библиотекой PHP Simple HTML DOM Parser

    copysite

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

     Возьмем HTML код: 

    <div><a href="http://xdan.ru"><div>Сайт по программированию парсеров</div><div> и многое другое</div></a></div>

    К примеру, из него нам нужно получить описание и url сайта. Если брать исключительно этот кусок кода, то все решается достаточно просто: 

    $html = '<div><a href="http://xdan.ru"><div>Сайт по программированию парсеров</div><div> и многое другое</div></a></div>';
    preg_match('#<div><a href="([^"]+)"><div>([^<]+)</div><div>([^<]+)</div></a></div>#U',$html,$list);
    echo 'url:'.$list[1].',title:'.$list[2].$list[3]; // выведет url:http://xdan.ru,title:Сайт по программированию парсеров и многое другое
    

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

    <div><a href=”http://xdan.ru”><div>Сайт по <b>программированию</b> парсеров</div><div> и многое <div> многое </div> другое </div></a></div>
    

    Такой код регулярному выражению не по зубам.

    Обычно, в вузах на этот случай учат писать конечный автомат. Суть его в том, что мы перебираем, посимвольно, весь html текст, находим начало тега, и строим дерево документа. Так называемое DOM (Document Object Model)

    Сейчас, писать такое самому  нет необходимости.

    В php, начиная с  версии 5, есть встроенные методы работы с деревом документа (класс DOMDocument), но основан он на XML парсере.

    А HTML и XML это хоть и очень похожие, но в тоже время абсолютно разные технологии.

    К примеру, непременное требование к XML это закрытые теги и отсутствие ошибок.

    Отсюда вытекает условие: ошибок в html, который мы парсим с помощью нативных средств php,  быть не должно.

    К сожалению, на сайтах донорах, ошибки не редки, а значит этот метод отпадает.

    Для корректного разбора таких сайтов, на помощь придут php библиотеки PHPQuery, Simple HTML DOM, Zend DOM Query, Nokogiri .

    Некоторые из них, после небольших манипуляций скармливают html  тому же DOMDocument. Мы не будем их рассматривать.

    В этой статье я расскажу про SimpleHTMLDOM. Этой библиотекой я пользуюсь уже несколько лет, и она меня еще ни разу не подводила.

  • Форматирование спарсенных данных в сервисе CopySite

    Часто при парсинге сайта, требуется дальнейшее изменение спарсенных данных. Это не всегда удобно, ведь создатели сайтов стараются максимально ускорить свой продукт, и поэтому в "интернет" выпускают только минифицированные версии скриптов и стилей.

    В реальном проекте это выглядит как-то так:

    Стили:

    body{background:url(image.png);border:1px solid #ccc;color:red;}.clearfix{diaplsy:table;float:none;clear:both}

    Скрипты

    (function($){$(function(){$('select').chosen()})}(jQuery))

    И конечно HTML

    <html><head><title>Крутой сайт</title></head><body><img src="/image.png"> и другие классыне картинки</body></html>

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

    Поэтому в CopySite мы добавили 3 опции в настройки скачивания сайта:

    format-html-css-js.png