<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>У меня все получится!! &#187; Программирование</title>
	<atom:link href="http://vilblog.ru/category/programmirovanie/feed/" rel="self" type="application/rss+xml" />
	<link>http://vilblog.ru</link>
	<description></description>
	<lastBuildDate>Wed, 25 Jan 2012 21:35:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Yii-фреймворк.</title>
		<link>http://vilblog.ru/2010/05/17/yii-frejmvork/</link>
		<comments>http://vilblog.ru/2010/05/17/yii-frejmvork/#comments</comments>
		<pubDate>Mon, 17 May 2010 10:32:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Программирование]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[yii]]></category>
		<category><![CDATA[проект]]></category>
		<category><![CDATA[фреймворк]]></category>

		<guid isPermaLink="false">http://vilblog.ru/?p=130</guid>
		<description><![CDATA[Нашел сегодня великолепную вещь &#8211; Yii framework. Нашел случайно, когда решил попробывать какой-нибудь php-фреймворк, кроме codeigniter. Открыл мануал, установил на сервер. В результате за 5 минут сделал управление пользователями (удаление, редактирование, создание, валидация и отображения). На codeigniter-e или на чистом php это заняло бы минимум час. Я сразу загорелся что-нибудь на нем написать, весь думал [...]]]></description>
			<content:encoded><![CDATA[<p>Нашел сегодня великолепную вещь &#8211; Yii framework. Нашел случайно, когда решил попробывать какой-нибудь php-фреймворк, кроме codeigniter. Открыл мануал, установил на сервер. В результате за 5 минут сделал управление пользователями (удаление, редактирование, создание, валидация и отображения). На codeigniter-e или на чистом php это заняло бы минимум час. Я сразу загорелся что-нибудь на нем написать, весь думал и только сейчас, когда писал пост придумал &#8211; сделать каталог скриптов, которые являются копиями каких-либо небольших, но популярных сайтов типа башорга или того же топсэйпа. Думаю многим будет интересно покопаться в исходниках целого сайта, а не в кусочках, которые выложены в статьях о программировании</p>
<p>з.ы Заметил у себя в панели от WordPress. что у ВСЕХ (!!!) спам-сообщений в поле URL: стоит фраза Вашсайт. Теперь весь спам чистится sql-запросом: &#8220;DELETE FROM wp_12_comments WHERE comment_author_url=&#8217;Вашсайт&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://vilblog.ru/2010/05/17/yii-frejmvork/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Парсеры на PHP. Часть 1.</title>
		<link>http://vilblog.ru/2010/04/02/parsery-na-php-chast-1/</link>
		<comments>http://vilblog.ru/2010/04/02/parsery-na-php-chast-1/#comments</comments>
		<pubDate>Fri, 02 Apr 2010 10:26:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://vilblog.ru/?p=99</guid>
		<description><![CDATA[Написание парсера достаточно нестандартная задача к которой на первых парах тяжело подступится. В этой статье я расскажу алгоритма для парсинга почти любого сайта.  В примере я использую PHP. Для начала рассмотрим некоторые необходимые функции и библиотеки: file_get_contents(string $url) – функция принимает в качестве параметра URL(кроме этого там может быть просто путь к файлу), на выходе [...]]]></description>
			<content:encoded><![CDATA[<p><img class="size-full wp-image-111 alignleft" title="i" src="http://vilblog.ru/wp-content/uploads/2010/04/i.jpg" alt="i" width="150" height="113" />Написание парсера достаточно нестандартная задача к которой на первых парах тяжело подступится. В этой статье я расскажу алгоритма для парсинга почти любого сайта.  В примере я использую PHP.<br />
Для начала рассмотрим некоторые необходимые функции и библиотеки:</p>
<p><strong>file_get_contents</strong>(string $url) – функция принимает в качестве параметра URL(кроме этого там может быть просто путь к файлу), на выходе возвращает содержимое страницы со  всеми тегами. У этой функции есть недостатки, к примеру в User-agent посылается значение переменной user_agent из файла настроек PHP, а это может помешать при парсинге.</p>
<p><strong>Библиотека  CURL.</strong> Библиотека нужна что бы можно было получать содержимое страниц с заголовками как у браузеров. Почитать более подробно можно здесь: <a title="http://ru2.php.net/manual/en/book.curl.php" href="http://ru2.php.net/manual/en/book.curl.php" target="_blank">http://ru2.php.net/manual/en/book.curl.php</a></p>
<p><strong>preg_match</strong>(string $pattern, string $subject, array &amp;$matches) – функция для работы с регулярными выражениями, на входе идут 3 парметра: $pattern – регулярное выражение, $subject – строка где идет поиск по регулярному выражению, $matches – массив результатов).</p>
<p><strong>preg_match_all</strong>(string $pattern, string $subject, array &amp;$matches) – та же самая функция, что и preg_match, только она ищет все вхождения шаблона.<br />
<span id="more-99"></span><br />
Теперь перейдем к  самому парсингу. Объяснять буду на примере этого сайта (vilblog.ru)</p>
<p>1. Рассмотрим сайт и определим принцип построения URL-ов, что бы их можно по очереди открыть. К пример на этом сайте посты расположены на страницах с URL-ами вида http://vilblog.ru/page/номер_страницы. Всего страниц 4, следовательно, необходимо открыть в каждую из них  внутри цикла, а оттуда смотреть как устроены URL-ы постов.</p>
<p>2. Тут возникает небольшая проблема, на странице могут быть ссылки на другие посты, которые расположены не на выбранной странице, поэтому смотрим html-код, что бы определить чем ссылки заголовков постов отличаются от остальных. В нашем случае там вот такой вот html-код:</p>
<pre style="color:#000000;background:#ffffff;"><span style="color:#a65700; ">&lt;</span><span style="color:#800000; font-weight:bold; ">h2</span><span style="color:#a65700; ">&gt;</span><span style="color:#a65700; ">&lt;</span><span style="color:#800000; font-weight:bold; ">a</span><span style="color:#274796; "> </span><span style="color:#074726; ">href</span><span style="color:#808030; ">=</span><span style="color:#0000e6; ">"http://vilblog.ru/2010/01/26/onlajn-treningi/"</span><span style="color:#274796; "> </span><span style="color:#074726; ">title</span><span style="color:#808030; ">=</span><span style="color:#0000e6; ">"Онлайн тренинги"</span><span style="color:#a65700; ">&gt;
</span>Онлайн тренинги<span style="color:#a65700; ">&lt;/</span><span style="color:#800000; font-weight:bold; ">a</span><span style="color:#a65700; ">&gt;</span><span style="color:#a65700; ">&lt;/</span><span style="color:#800000; font-weight:bold; ">h2</span><span style="color:#a65700; ">&gt;</span></pre>
<p>Как видно ссылка расположена внутри тега h2. То есть внутри регулярного выражения нужно найти все что расположено внутри тега A, который расположен внутри тега H2 и извлечь атрибут href.</p>
<p>3.    После того как мы получили URL-ы всех статей нам необходимо отпарсить их. Открываем любую и смотрим где расположен html-код самого контента. Тут все сложнее, текст расположен между элементами:</p>
<pre style="color:#000000;background:#ffffff;">Прокомментировать<span style="color:#a65700; ">&lt;/</span><span style="color:#800000; font-weight:bold; ">a</span><span style="color:#a65700; ">&gt;</span><span style="color:#a65700; ">&lt;/</span><span style="color:#800000; font-weight:bold; ">p</span><span style="color:#a65700; ">&gt;</span>
и</pre>
<pre style="color:#000000;background:#ffffff;"><span style="color:#a65700; ">&lt;/</span><span style="color:#800000; font-weight:bold; ">p</span><span style="color:#a65700; ">&gt;</span></pre>
<p>Так же извлекаем его регулярным выражением</p>
<p>4.  Собственно сам код парсера:</p>
<pre style="color:#000000;background:#ffffff;">
<pre><span style="color:#a65700; background:#ffffe8; ">&lt;?php</span>
<span style="color:#696969; background:#ffffe8; ">//массив с контентом</span>
<span style="color:#000000; background:#ffffe8; ">$cont</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#808030; background:#ffffe8; ">=</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#800000; background:#ffffe8; font-weight:bold; ">array</span><span style="color:#808030; background:#ffffe8; ">(</span><span style="color:#808030; background:#ffffe8; ">)</span><span style="color:#800080; background:#ffffe8; ">;</span>

<span style="color:#696969; background:#ffffe8; ">//парсим в цикле 4 страницы</span>
<span style="color:#800000; background:#ffffe8; font-weight:bold; ">for</span><span style="color:#808030; background:#ffffe8; ">(</span><span style="color:#000000; background:#ffffe8; ">$i</span><span style="color:#808030; background:#ffffe8; ">=</span><span style="color:#008c00; background:#ffffe8; ">1</span><span style="color:#800080; background:#ffffe8; ">;</span><span style="color:#000000; background:#ffffe8; ">$i</span><span style="color:#808030; background:#ffffe8; ">&lt;</span><span style="color:#808030; background:#ffffe8; ">=</span><span style="color:#008c00; background:#ffffe8; ">1</span><span style="color:#800080; background:#ffffe8; ">;</span><span style="color:#000000; background:#ffffe8; ">$i</span><span style="color:#808030; background:#ffffe8; ">+</span><span style="color:#808030; background:#ffffe8; ">+</span><span style="color:#808030; background:#ffffe8; ">)</span>
<span style="color:#800080; background:#ffffe8; ">{</span>
<span style="color:#000000; background:#ffffe8; ">    </span><span style="color:#696969; background:#ffffe8; ">//загружаем страницу</span>
<span style="color:#000000; background:#ffffe8; ">    </span><span style="color:#000000; background:#ffffe8; ">$data</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#808030; background:#ffffe8; ">=</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#400000; background:#ffffe8; ">file_get_contents</span><span style="color:#808030; background:#ffffe8; ">(</span><span style="color:#0000e6; background:#ffffe8; ">"http://vilblog.ru/page/"</span><span style="color:#808030; background:#ffffe8; ">.</span><span style="color:#000000; background:#ffffe8; ">$i</span><span style="color:#808030; background:#ffffe8; ">)</span><span style="color:#800080; background:#ffffe8; ">;</span>
<span style="color:#000000; background:#ffffe8; ">    </span><span style="color:#696969; background:#ffffe8; ">//извлекаем ссылки</span>
<span style="color:#000000; background:#ffffe8; ">    </span><span style="color:#400000; background:#ffffe8; ">preg_match_all</span><span style="color:#808030; background:#ffffe8; ">(</span><span style="color:#0000e6; background:#ffffe8; ">"</span><span style="color:#800000; background:#ffffe8; ">/</span><span style="color:#0f69ff; background:#ffffe8; ">\&lt;</span><span style="color:#0000e6; background:#ffffe8; ">h2</span><span style="color:#0f69ff; background:#ffffe8; ">\&gt;</span><span style="color:#0f69ff; background:#ffffe8; ">\&lt;</span><span style="color:#0000e6; background:#ffffe8; ">a</span><span style="color:#0f69ff; background:#ffffe8; ">\ </span><span style="color:#0000e6; background:#ffffe8; ">href</span><span style="color:#0f69ff; background:#ffffe8; ">\=</span><span style="color:#0f69ff; background:#ffffe8; ">\"</span><span style="color:#808030; background:#ffffe8; ">(</span><span style="color:#808030; background:#ffffe8; ">.</span><span style="color:#808030; background:#ffffe8; ">*</span><span style="color:#808030; background:#ffffe8; ">)</span><span style="color:#0f69ff; background:#ffffe8; ">\"</span><span style="color:#800000; background:#ffffe8; ">/</span><span style="color:#800000; background:#ffffe8; font-weight:bold; ">U</span><span style="color:#0000e6; background:#ffffe8; ">"</span><span style="color:#808030; background:#ffffe8; ">,</span><span style="color:#000000; background:#ffffe8; ">$data</span><span style="color:#808030; background:#ffffe8; ">,</span><span style="color:#000000; background:#ffffe8; ">$mch</span><span style="color:#808030; background:#ffffe8; ">)</span><span style="color:#800080; background:#ffffe8; ">;</span>
<span style="color:#000000; background:#ffffe8; ">    </span>
<span style="color:#000000; background:#ffffe8; ">    </span><span style="color:#696969; background:#ffffe8; ">//в переменно $mch[1] получаем массив ссылок на посты</span>
<span style="color:#000000; background:#ffffe8; ">    </span><span style="color:#696969; background:#ffffe8; ">//в цикле просматриваем все URL</span>
<span style="color:#000000; background:#ffffe8; ">    </span><span style="color:#800000; background:#ffffe8; font-weight:bold; ">foreach</span><span style="color:#808030; background:#ffffe8; ">(</span><span style="color:#000000; background:#ffffe8; ">$mch</span><span style="color:#808030; background:#ffffe8; ">[</span><span style="color:#008c00; background:#ffffe8; ">1</span><span style="color:#808030; background:#ffffe8; ">]</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#800000; background:#ffffe8; font-weight:bold; ">as</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#000000; background:#ffffe8; ">$p</span><span style="color:#808030; background:#ffffe8; ">)</span>
<span style="color:#000000; background:#ffffe8; ">    </span><span style="color:#800080; background:#ffffe8; ">{</span>
<span style="color:#000000; background:#ffffe8; ">        </span><span style="color:#000000; background:#ffffe8; ">$tmp</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#808030; background:#ffffe8; ">=</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#0000e6; background:#ffffe8; ">""</span><span style="color:#800080; background:#ffffe8; ">;</span>
<span style="color:#000000; background:#ffffe8; ">        </span><span style="color:#696969; background:#ffffe8; ">//загружаем пост</span>
<span style="color:#000000; background:#ffffe8; ">        </span><span style="color:#000000; background:#ffffe8; ">$post</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#808030; background:#ffffe8; ">=</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#400000; background:#ffffe8; ">file_get_contents</span><span style="color:#808030; background:#ffffe8; ">(</span><span style="color:#000000; background:#ffffe8; ">$p</span><span style="color:#808030; background:#ffffe8; ">)</span><span style="color:#800080; background:#ffffe8; ">;</span>
<span style="color:#000000; background:#ffffe8; ">        </span><span style="color:#696969; background:#ffffe8; ">//извлекаем содержимое страницы (ТУТ СПЕЦBFАЛЬНО СДЕЛАНА ОШBБКА)</span>
<span style="color:#000000; background:#ffffe8; ">        </span><span style="color:#400000; background:#ffffe8; ">preg_match_all</span><span style="color:#808030; background:#ffffe8; ">(</span><span style="color:#0000e6; background:#ffffe8; ">"</span><span style="color:#800000; background:#ffffe8; ">/</span><span style="color:#0000e6; background:#ffffe8; ">ть</span><span style="color:#0f69ff; background:#ffffe8; ">\&lt;</span><span style="color:#0f69ff; background:#ffffe8; ">\/</span><span style="color:#0000e6; background:#ffffe8; ">a</span><span style="color:#0f69ff; background:#ffffe8; ">\&gt;</span><span style="color:#0f69ff; background:#ffffe8; ">\&lt;</span><span style="color:#0f69ff; background:#ffffe8; ">\/</span><span style="color:#0000e6; background:#ffffe8; ">p</span><span style="color:#0f69ff; background:#ffffe8; ">\&gt;</span><span style="color:#808030; background:#ffffe8; ">(</span><span style="color:#808030; background:#ffffe8; ">.</span><span style="color:#808030; background:#ffffe8; ">*</span><span style="color:#808030; background:#ffffe8; ">)</span><span style="color:#0f69ff; background:#ffffe8; ">\&lt;</span><span style="color:#0000e6; background:#ffffe8; ">p</span><span style="color:#0f69ff; background:#ffffe8; ">\ </span><span style="color:#0000e6; background:#ffffe8; ">class</span><span style="color:#0f69ff; background:#ffffe8; ">\=</span><span style="color:#0f69ff; background:#ffffe8; ">\"</span><span style="color:#0000e6; background:#ffffe8; ">meta2</span><span style="color:#0f69ff; background:#ffffe8; ">\"</span><span style="color:#0f69ff; background:#ffffe8; ">\&gt;</span><span style="color:#800000; background:#ffffe8; ">/</span><span style="color:#0000e6; background:#ffffe8; ">"</span><span style="color:#808030; background:#ffffe8; ">,</span><span style="color:#000000; background:#ffffe8; ">$post</span><span style="color:#808030; background:#ffffe8; ">,</span><span style="color:#000000; background:#ffffe8; ">$mch2</span><span style="color:#808030; background:#ffffe8; ">)</span><span style="color:#800080; background:#ffffe8; ">;</span>
<span style="color:#000000; background:#ffffe8; ">        </span>
<span style="color:#000000; background:#ffffe8; ">        </span>
<span style="color:#000000; background:#ffffe8; ">        </span><span style="color:#696969; background:#ffffe8; ">//убираем ненужные пробелы</span>
<span style="color:#000000; background:#ffffe8; ">        </span><span style="color:#000000; background:#ffffe8; ">$tmp</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#808030; background:#ffffe8; ">=</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#400000; background:#ffffe8; ">trim</span><span style="color:#808030; background:#ffffe8; ">(</span><span style="color:#000000; background:#ffffe8; ">$mch2</span><span style="color:#808030; background:#ffffe8; ">)</span><span style="color:#800080; background:#ffffe8; ">;</span>
<span style="color:#000000; background:#ffffe8; ">        </span>
<span style="color:#000000; background:#ffffe8; ">        </span><span style="color:#000000; background:#ffffe8; ">$cont</span><span style="color:#808030; background:#ffffe8; ">[</span><span style="color:#808030; background:#ffffe8; ">]</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#808030; background:#ffffe8; ">=</span><span style="color:#000000; background:#ffffe8; "> </span><span style="color:#000000; background:#ffffe8; ">$tmp</span><span style="color:#800080; background:#ffffe8; ">;</span>
<span style="color:#000000; background:#ffffe8; ">        </span>
<span style="color:#000000; background:#ffffe8; ">    </span><span style="color:#800080; background:#ffffe8; ">}</span>
<span style="color:#000000; background:#ffffe8; ">    </span>
<span style="color:#800080; background:#ffffe8; ">}</span>
<span style="color:#696969; background:#ffffe8; ">//на выходе получаем массив $cont со всеми статьями блога</span>
<span style="color:#a65700; background:#ffffe8; ">?&gt;</span>';</pre>
</pre>
<p>Большинство сайтов можно отпарсить таким способом только лишь изменяя регулярные выражения. Кроме контента с html-кода страницы можно извлечь ключевые слова, мета-описания, заголовок и другое. Если есть вопросы пишите в комментариях.</p>
]]></content:encoded>
			<wfw:commentRss>http://vilblog.ru/2010/04/02/parsery-na-php-chast-1/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>

