<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:gd="http://schemas.google.com/g/2005" xmlns:georss="http://www.georss.org/georss" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-4954804721255445302</atom:id><lastBuildDate>Fri, 01 Nov 2024 10:36:49 +0000</lastBuildDate><category>seo</category><category>интернет</category><category>парсер поисковой выдачи</category><category>программирование</category><category>психология</category><category>разное</category><title>SEO блог Омского студента</title><description>Блог о различных способах заработка в Интернете, SEO оптимизации. Здесь вы можете узнать всё о создании, раскрутке, продвижении и монетизации своих сайтов или блогов.</description><link>http://omskblog.blogspot.com/</link><managingEditor>noreply@blogger.com (Артемий)</managingEditor><generator>Blogger</generator><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4954804721255445302.post-3264977895829737837</guid><pubDate>Sat, 07 Jan 2012 16:54:00 +0000</pubDate><atom:updated>2012-01-08T18:32:19.494+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">seo</category><category domain="http://www.blogger.com/atom/ns#">парсер поисковой выдачи</category><category domain="http://www.blogger.com/atom/ns#">программирование</category><title>Парсинг результатов выдачи с Yandex.XML  на Java</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div&gt;&lt;h4&gt;Часть 1. Лирическое отступление.&lt;/h4&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Если вы не хотите читать "многабукв", а хотите сразу увидеть пример кода - переходите ко &lt;a href="http://omskblog.blogspot.com/2012/01/parsing-resultatov-vydachi-yandex-xml.html#code""&gt;второй части&lt;/a&gt; этой статьи.&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgWffgpYCKYNI3N474Jp-X1S_N3lOJvnqCkBMbb7wpkLVA6H2zAUpyyVki7JEaNvHBpN3d8t9ausZ9KwntbPAWS7nrMe6Me3xqt6_jRkqUPVKvP2aL-LENsaIFCsj_2eIaZADJ-ESgTu5m/s1600/seo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="170" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgWffgpYCKYNI3N474Jp-X1S_N3lOJvnqCkBMbb7wpkLVA6H2zAUpyyVki7JEaNvHBpN3d8t9ausZ9KwntbPAWS7nrMe6Me3xqt6_jRkqUPVKvP2aL-LENsaIFCsj_2eIaZADJ-ESgTu5m/s200/seo.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Года 4 назад я впервые окунулся в мир SEO. Это было для меня ново и интересно, а уж как завораживали финансовые "стриптизы" популярных сеошников - голова кругом шла :)&lt;br /&gt;
&lt;div&gt;С тех пор много воды утекло. Честно говоря, каких-то особых высот в этом деле я не достиг, но полезные знания сохранились. Помимо знаний сохранилось и несколько сайтов, которые я время от времени то забрасываю, то всячески стараюсь оживить.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Сейчас, будучи старшим программистом в довольно крупной организации, регулярно выделять время на это хобби не получается. Поэтому всё чаще возникают идеи автоматизации некоторой работы. Вот подобной простенькой задачкой я и решил заняться после отходняка от новогодних праздников :)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Плох тот сеошник, который не знает позиции своего сайта по основному набору ключевых слов. С одной стороны это легко решается приобретением какого-нибудь специализированного софта, а-ля Yazzle или ему подобных. С другой стороны регулярный контроль позиций можно осуществлять с помощью сервиса SeoBudget за сущие копейки (&lt;a href="http://seobudget.ru/seo/380393a6b630f7b1620543e394c909c5/" target="_blank"&gt;рефссылка&lt;/a&gt;), что я и делал до поры до времени. Есть и третий вариант - на просторах интернета можно найти бесплатные поделки, которые может быть выглядят похуже, умеют поменьше и рекламируются поскромнее, но при этом ничуть не хуже старших собратьев умеют проверять позиции сайта в выдаче по ключевым словам.&lt;/div&gt;&lt;div&gt;Но нормальные герои всегда идут в обход, вот и я по исконно русской программерской традиции решил написать свой софт для снятия позиций.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;Начать решил с Яндекса, ибо с ним у меня всегда отношения складываются очень напряженно. За полчасика накидал парсер поисковой выдачи, запустил всю эту красоту и... словил бан от Яши - мои запросы справедливо были расценены, как роботские. Я посмеялся над своей наивностью, пригрозил Яндексу вторым раундом сражения, когда я напишу парсер с человекоподобным поведением, антикапчей, &lt;strike&gt;блэк джеком и балеринами&lt;/strike&gt; и пошел писать парсер выдачи через сервис Яндекс.XML.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3EeMdHBY4TLyk1e1wZpTPq8NJLgsD16Qlj4ORk7eo0QpM6mLNWEuMOp1MgKNrk8xT_c4zanusxch62l62zHvvh85FFMYUFeqS05Kl2Er3eqi9nnTlau71Nlmazu7G5S8Fb5JAteR5CYxU/s1600/yandex-xml.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="65" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3EeMdHBY4TLyk1e1wZpTPq8NJLgsD16Qlj4ORk7eo0QpM6mLNWEuMOp1MgKNrk8xT_c4zanusxch62l62zHvvh85FFMYUFeqS05Kl2Er3eqi9nnTlau71Nlmazu7G5S8Fb5JAteR5CYxU/s200/yandex-xml.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;Прежде чем перейти непосредственно к примеру взаимодействия с этим сервисом, хочу сказать пару слов об этом самом сервисе. Итак, Яндекс.XML - это по сути интерфейс взаимодействия программ/сервисов/сайтов пользователя с поисковой базой Яндекса. Сам Яша делает акцент на том, что лучше этот сервис использовать для прикручивания удобной формочки поиска на вашем сайте. При этом он не даёт расслабляться наглым халявщикам вроде меня и ограничивает использование сервиса 1000-ю запросами в день с заранее зарегистрированного IP-адреса. Более того, чтобы получить разрешение на эти 1000 запросов в день, нужно вбить какой-нибудь номер сотового телефона, &lt;i&gt;отличный&lt;/i&gt; от того, к которому привязан ваш почтовый ящик, на него придет СМСка с кодом подтверждения и только тогда наступит счастье.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;В общем мороки много, выгода сомнительна - с тысячью запросами в день особо не разгуляешься, но халява есть халява, к тому же для простой проверки своих позиций в топе этого будет достаточно.&lt;/div&gt;&lt;div&gt;Забегая далеко вперёд, я скажу, что всё-таки нашел не бесплатный, но довольно дешёвый способ анализировать выдачу Яндекса (примерно 1 копейка за запрос против 3 копеек у SeoBudget), и буду двигаться в этом направлении, но это уже тема для совсем другой статьи.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;h4&gt;&lt;a name="code"&gt;&lt;/a&gt;Часть 2. Переходим к конкретике.&lt;/h4&gt;&lt;/div&gt;&lt;div&gt;Пора перейти к коду.&lt;/div&gt;&lt;div&gt;Волка ноги кормят, а меня - язык Java, поэтому и пример будет на Java. К тому же беглый поиск примеров взаимодействия с Yandex.XML на java результатов не дал: кругом один php, и чуть-чуть perl-а.&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Слово "XML" в названии сервиса как бы намекает, что работать нам придется именно с xml форматом данных. Причем в этом формате мы будем не только получать ответ, но и посылать запрос.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Начнем с запроса.&lt;/b&gt;&lt;br /&gt;
Его можно отослать двумя способами: GET и POST. В обоих случаях запрос посылается на адрес&lt;br /&gt;
&lt;pre class="prettyprint"&gt;http://xmlsearch.yandex.ru/xmlsearch?user=your_user&amp;amp;key=your_key&lt;/pre&gt;, где:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; - &lt;i&gt;your_user&lt;/i&gt; - ваш логин для доступа к аккаунту яндекса;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; - &lt;i&gt;your_key&lt;/i&gt; - сгенерированный для вас яндексом ключ.&lt;br /&gt;
&lt;br /&gt;
Все эти параметры можно посмотреть на странице настроек сервиса Yandex.XML в поле "Ваш адрес для совершения запроса".&lt;br /&gt;
&lt;br /&gt;
Дальше. Возможные параметры запроса яндекс описывает &lt;a href="http://help.yandex.ru/xml/?id=316625" target="_blank"&gt;тут&lt;/a&gt;.&lt;br /&gt;
Меня заинтересовали только два:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; - &lt;i&gt;query&lt;/i&gt; - сам текст запроса;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; - &lt;i&gt;page&lt;/i&gt; - номер страницы поисковой выдачи. Отсчет начинается с 0, т.е. page=1 - это вторая страница поисковой выдачи.&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;b&gt;Рассмотрим GET запрос.&lt;/b&gt;&lt;br /&gt;
Собственно чтобы отослать GET запрос, надо в конец адреса доклеить через амперсанд (&amp;amp;) интересующие нас параметры:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;http://xmlsearch.yandex.ru/xmlsearch?user=your_user&amp;amp;key=your_key&amp;amp;query=your_query&amp;amp;page=0&lt;/pre&gt;Простенький класс, который вытягивает InputStream ответа по нашему GET запросу и пример его использования в main методе:&lt;/div&gt;&lt;/div&gt;&lt;pre class="prettyprint"&gt;package com.blogspot.omskblog.yaxml;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.net.URL;
import java.net.URLEncoder;

public class YaSearcher {

    private static final String YA_URL = "http://xmlsearch.yandex.ru/xmlsearch?";
    private static final String ENC = "UTF-8";
    private static final String AND = "&amp;amp;";

    private String user;
    private String key;

    /**
     * Constructor
     * @param user your Yandex username
     * @param key key generated by Yandex.XML
     */
    public YaSearcher(final String user, final String key) {
        this.user = user;
        this.key = key;
    }

    /**
     * Retrieve Yandex.XML response stream via GET request
     * @param query search query
     * @param pageNumber number of search page
     * @return Yandex.XML response stream
     * @throws IOException input/output exception
     */
    public InputStream retrieveResponseViaGetRequest(
        final String query,
        final int pageNumber
    ) throws IOException {

        final StringBuilder address = new StringBuilder(YA_URL);
        address.append("user=").append(user).append(AND)
            .append("key=").append(key).append(AND)
            .append("query=").append(URLEncoder.encode(query, ENC)).append(AND)
            .append("page=").append(pageNumber);
        final URL url = new URL(address.toString());
        return url.openStream();
    }

    /**
     * Example: print response to System.out
     */
    public static void main(String[] args) throws IOException {

        final String user = "your_user";
        final String key = "your_key";
        final String query = "Привет, мир!";
        final int page = 0;

        LineNumberReader lineReader = null;
        try {
            final YaSearcher searcher = new YaSearcher(user, key);
            lineReader = new LineNumberReader(
                new InputStreamReader(
                    searcher.retrieveResponseViaGetRequest(query, page)
                )
            );
            String line;
            while ((line = lineReader.readLine()) != null) {
                System.out.println(line);
            }
        } finally {
            if (lineReader != null) {
                lineReader.close();
            }
        }
    }
}
&lt;/pre&gt;&lt;i&gt;* URLEncoder&lt;/i&gt; перекодирует запрос в шестнадцатиричный формат, чтобы не возникало проблем с небезопасными символами в URL: пробелами, угловыми и фигурными скобками и т.п.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Переходим к POST запросу.&lt;/b&gt;&lt;br /&gt;
POST запрос нужно отсылать на тот же адрес (с указанными параметрами user и key), а вот поисковую фразу и номер страницы надо указывать в теле запроса, причем в xml формате:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;  
&amp;lt;request&amp;gt;  
    &amp;lt;query&amp;gt;Привет, мир!&amp;lt;/query&amp;gt;
    &amp;lt;page&amp;gt;0&amp;lt;/page&amp;gt; 
&amp;lt;/request&amp;gt;
&lt;/pre&gt;&lt;br /&gt;
Особо решил ничего не выдумывать, xml запрос склеил как строку. Добавляем в уже написанный класс новый метод (main метод для испытаний остаётся таким же, только retrieveResponseViaGetRequest заменить на retrieveResponseViaPostRequest):&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;nbsp; &amp;nbsp; /**
     * Retrieve Yandex.XML response stream via POST request
     * @param query search query
     * @param pageNumber number of search page
     * @return Yandex.XML response stream
     * @throws IOException input/output exception
     */
    public InputStream retrieveResponseViaPostRequest(
        final String query,
        final int pageNumber
    ) throws IOException {

        OutputStreamWriter writer = null;
        try {
            final StringBuilder address = new StringBuilder(YA_URL);
            address.append("user=").append(user).append(AND).append("key=").append(key);
            final StringBuilder data = new StringBuilder();
            data.append("&amp;lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&amp;gt;&amp;lt;request&amp;gt;")
                .append("&amp;lt;query&amp;gt;").append(query).append("&amp;lt;/query&amp;gt;")
                .append("&amp;lt;page&amp;gt;").append(pageNumber).append("&amp;lt;/page&amp;gt;&amp;lt;/request&amp;gt;");

            final URL url = new URL(address.toString());
            final URLConnection conn = url.openConnection();
            conn.setDoOutput(true);

            writer = new OutputStreamWriter(conn.getOutputStream());
            writer.write(data.toString());
            writer.flush();

            return conn.getInputStream();
        } finally {
            if (writer != null) {
                writer.close();
            }
        }
    }
&lt;/pre&gt;Тут с экранированием дело обстоит посложнее. С одной стороны нам не страшны пробелы, xml их понимает корректно. С другой стороны специфичные для xml формата символы &lt;i&gt;&amp;lt;&lt;/i&gt;, &lt;i&gt;&amp;gt;&lt;/i&gt;, &lt;i&gt;&amp;amp;&lt;/i&gt;, &lt;i&gt;\&lt;/i&gt;, &lt;i&gt;'&lt;/i&gt;, &lt;i&gt;"&lt;/i&gt; не экранируются стандартными средствами java (во всяком случае я такого не знаю), и, следовательно, нашим кодом не будут поддерживаться. Решить эту проблему можно либо написав собственный обработчик этих символов (что мне, честно говоря, лень), либо подключив библиотеку &lt;i&gt;commons-lang-3.0&lt;/i&gt; и вызывать оттуда метод&lt;br /&gt;
&lt;pre class="prettyprint"&gt;StringEscapeUtils.escapeXml(query)&lt;/pre&gt;&lt;br /&gt;
На этом тему с запросами можно считать закрытой. Какой метод выбрать - каждый решает сам. Причем отталкиваться стоит от задачи и контекста. В простейшем случае я бы выбрал GET запросы, так как там и кода меньше и экранирование прикрутилось с полпинка. &lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Разбор результатов поиска.&lt;/b&gt;&lt;br /&gt;
И вот мы на финишной прямой. Осталось разобрать xml ответ от сервиса и привести все данные в удобоваримый вид.&lt;br /&gt;
&lt;br /&gt;
Формат ответа Яндекс описывает &lt;a href="http://help.yandex.ru/xml/?id=362990" target="_blank"&gt;тут&lt;/a&gt;. Опять же для нашей мини-задачки вся эта информация избыточна, поэтому выберем только самое интересное:&lt;br /&gt;
&amp;nbsp; &amp;nbsp; - &lt;i&gt;url&lt;/i&gt; - URL страницы в поиске;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; - &lt;i&gt;domain&lt;/i&gt; - домен сайта. Может пригодиться, например, для определения какая конкретная страница сайта в поиске идет выше по заданному ключу;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; - &lt;i&gt;title&lt;/i&gt; - заголовок страницы;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; - &lt;i&gt;headline&lt;/i&gt; - описание страницы, берётся из мета-тэга description;&lt;br /&gt;
&amp;nbsp; &amp;nbsp; - &lt;i&gt;passages&lt;/i&gt; - примеры содержащих ключевую фразу предложений с найденной страницы.&lt;br /&gt;
&lt;br /&gt;
Пожалуй, хватит. Парсить результат буду в класс:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;package com.blogspot.omskblog.yaxml;

import java.util.ArrayList;
import java.util.List;

/**
 * Representation of Yandex SERP page
 */
public class YaPage {

    public static final int ITEMS_PER_PAGE = 10;

    private String keyword;
    private int pageNumber;
    private List&amp;lt;YaItem&amp;gt; yaItems = new ArrayList&amp;lt;YaItem&amp;gt;();

    /**
     * Constructor
     * @param keyword keyword for searching
     * @param pageNumber number of page
     */
    public YaPage(final String keyword, final int pageNumber) {
        this.keyword = keyword;
        this.pageNumber = pageNumber;
    }

    public List&amp;lt;YaItem&amp;gt; getYaItems() {
        return yaItems;
    }

    /**
     * Add one SERP item to collection (page)
     * @param item one SERP item
     */
    public void addYaItem(final YaItem item) {

        final int position = (pageNumber * ITEMS_PER_PAGE) + yaItems.size() + 1;
        item.setPosition(position);
        yaItems.add(item);
    }
}
&lt;/pre&gt;, где каждый YaItem - это:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;package com.blogspot.omskblog.yaxml;

/**
 * Representation of one item in Yandex SERP
 */
public class YaItem {

    private int position;
    private String url;
    private String domain;
    private String title;
    private String description = "";
    private String passages = "";

    /**
     * Constructor
     * @param url url of current item
     */
    public YaItem(final String url) {
        this.url = url;
    }

    /* Тут набор getter-ов для приватных полей класса... */

    public void setPosition(final int position) {
        this.position = position;
    }

    public void setDomain(final String domain) {
        this.domain = domain;
    }

    public void setTitle(final String title) {
        this.title = title;
    }

    public void setDescription(final String description) {
        this.description = description;
    }

    public void addPassage(final String passage) {
        passages += passage;
    }

    @Override
    public String toString() {
        return "YaItem{" +
            "position=" + position +
            ", url='" + url + '\'' +
            ", domain='" + domain + '\'' +
            ", title='" + title + '\'' +
            ", description='" + description + '\'' +
            ", passages='" + passages + '\'' +
            '}';
    }
}
&lt;/pre&gt;&lt;br /&gt;
Для парсинга я нарисовал простенький handler для SAX parser-а:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;package com.blogspot.omskblog.yaxml;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import java.io.CharArrayWriter;

/**
 * Handler for Yandex.XML's response parsing
 */
public class YaHandler extends DefaultHandler {

    private static final String IGNORE_TAG = "hlword";

    private final CharArrayWriter buffer = new CharArrayWriter();
    private YaItem currentItem;
    private YaPage yaPage;

    /**
     * Constructor
     * @param yaPage yandex page that will be filled with SERP items
     */
    public YaHandler(final YaPage yaPage) {
        this.yaPage = yaPage;
    }

    @Override
    public void startElement(
        final String uri,
        final String localName,
        final String qName,
        final Attributes attr
    ) throws SAXException {
        super.startElement(uri, localName, qName, attr);
        if (!IGNORE_TAG.equals(qName)) {
            buffer.reset();
        }
    }

    @Override
    public void endElement(
        final String uri,
        final String localName,
        final String qName
    ) throws SAXException {

        super.endElement(uri, localName, qName);
        if ("error".equals(qName)) {
            throw new IllegalArgumentException("Bad request: " + buffer.toString());
        } else if ("url".equals(qName)) {
            currentItem = new YaItem(buffer.toString());
        } else if ("domain".equals(qName) &amp;amp;&amp;amp; currentItem != null) {
            currentItem.setDomain(buffer.toString());
        } else if ("title".equals(qName) &amp;amp;&amp;amp; currentItem != null) {
            currentItem.setTitle(clearFromTags(buffer.toString()));
        } else if ("headline".equals(qName) &amp;amp;&amp;amp; currentItem != null) {
            currentItem.setDescription(clearFromTags(buffer.toString()));
        } else if ("passage".equals(qName) &amp;amp;&amp;amp; currentItem != null) {
            currentItem.addPassage(clearFromTags(buffer.toString()));
        } else if ("group".equals(qName) &amp;amp;&amp;amp; currentItem != null) {
            yaPage.addYaItem(currentItem);
        }
    }

    @Override
    public void characters(final char[] chars, final int start, final int length)
    throws SAXException {
        super.characters(chars, start, length);
        buffer.write(chars, start, length);
    }

    /**
     * Clear text from unwanted tags
     * @param text text to clear
     * @return cleared text
     */
    private String clearFromTags(final String text) {
        return text.replaceAll("&amp;lt;" + IGNORE_TAG +"&amp;gt;", "")
            .replaceAll("&amp;lt;/" + IGNORE_TAG + "&amp;gt;", "");
    }
}
&lt;/pre&gt;&lt;br /&gt;
В ранее написанный класс YaSearcher добавляем метод для получения распарсенного результата:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;nbsp; &amp;nbsp; /**
     * Load parsed yandex page from Yandex.XML service
     * @param query query for searching
     * @param pageNumber number of page
     * @return parsed result of searching 
     * @throws IOException input/output exception
     * @throws SAXException parsing exception
     */
    public YaPage loadYaPage(final String query, final int pageNumber)
    throws IOException, SAXException {

        final YaPage result = new YaPage(query, pageNumber);
        final XMLReader xmlReader = XMLReaderFactory.createXMLReader();
        xmlReader.setContentHandler(new YaHandler(result));
        xmlReader.parse(
            new InputSource(
                this.retrieveResponseViaGetRequest(query, pageNumber)
            )
        );
        return result;
    }
&lt;/pre&gt;И переписываем метод main для наглядной иллюстрации работы парсера:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;nbsp; &amp;nbsp; /**
     * Example: print parsed response to System.out
     */
    public static void main(String[] args) throws IOException, SAXException {
        
        final String user = "your_user";
        final String key = "your_key";
        final String query = "Hello";
        final int page = 0;

        final YaSearcher searcher = new YaSearcher(user, key);
        final YaPage result = searcher.loadYaPage(query, page);
        for (YaItem item : result.getYaItems()) {
            System.out.println(item);
        }
    }
&lt;/pre&gt;Вуаля!&lt;br /&gt;
&lt;br /&gt;
&lt;h4&gt;Часть 3. Заключение.&lt;/h4&gt;В общем чего я хотел этим примером показать. Не так страшен черт как его малюют. Я постарался максимально подробно рассказать что и как делать, чтобы даже начинающие программисты без труда разобрались в примере. Ничего революционного здесь нет: HTTP запрос и парсинг XML файла. Прикрутите считывание своих ключевиков и сайтов из файла, запись результатов в файл и жмакайте батник, запускающий программку, каждый день или каждый АП. И будет вам бесплатный сбор статистики по позициям. &lt;br /&gt;
&lt;br /&gt;
Удачи!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;----&gt;&gt;&gt;
&lt;a href='http://omskblog.blogspot.com'&gt;Блог коренного Омича&lt;/a&gt;.&lt;/div&gt;</description><link>http://omskblog.blogspot.com/2012/01/parsing-resultatov-vydachi-yandex-xml.html</link><author>noreply@blogger.com (Артемий)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgWffgpYCKYNI3N474Jp-X1S_N3lOJvnqCkBMbb7wpkLVA6H2zAUpyyVki7JEaNvHBpN3d8t9ausZ9KwntbPAWS7nrMe6Me3xqt6_jRkqUPVKvP2aL-LENsaIFCsj_2eIaZADJ-ESgTu5m/s72-c/seo.jpg" width="72"/><thr:total>16</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-4954804721255445302.post-8225662915839348721</guid><pubDate>Wed, 04 Mar 2009 16:49:00 +0000</pubDate><atom:updated>2012-01-06T21:54:04.991+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">интернет</category><category domain="http://www.blogger.com/atom/ns#">психология</category><category domain="http://www.blogger.com/atom/ns#">разное</category><title>Методы воздействия на подсознание человека</title><description>&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;На правах первой статьи в блоге.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkS1xZLQxXki7eDhCzf29ECbxJyP9Hh0PEZ5mdRO5jHVrQhP0hk5sGGxfrQHJdeCyJJ9qZJebplnSR-TT9rWF5opMsN2VP4UEhDKFsF7KHFCxzydgwEx4BCHJx3tADTRMRFkqY8PuGp9c-/s1600/vozdejstvie-na-podsoznanie.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkS1xZLQxXki7eDhCzf29ECbxJyP9Hh0PEZ5mdRO5jHVrQhP0hk5sGGxfrQHJdeCyJJ9qZJebplnSR-TT9rWF5opMsN2VP4UEhDKFsF7KHFCxzydgwEx4BCHJx3tADTRMRFkqY8PuGp9c-/s200/vozdejstvie-na-podsoznanie.jpg" width="178" /&gt;&lt;/a&gt;&lt;/div&gt;Когда-то давым давно, когда трава была зеленее, а вода чище, нам в институте читали интересную лекцию на тему человеческой психологии и способах влияния на массы. Лекция мне очень понравилась, хотя многие темы были затронуты довольно повехностно. Я решил оформить основные мысли той лекции в отдельную статью, чтобы не забыть.&lt;br /&gt;
Насколько она будет полезна другим - судить не мне.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Во времена всеобщей информатизации Интернет является не только отличным средством для общения, чтения новостей или даже заработка, но и прекрасной возможностью &lt;b&gt;влиять на массы&lt;/b&gt;. Думаю, что многие из "обитателей" всеобщей паутины не смотрят (ну или почти не смотрят) телевизор. Кто-то не находит себе там ничего интересного, кто-то считает, что там всё куплено и людям врут, а кто-то попросту экономит электричество :) Многие, если не все, слышали про&amp;nbsp;"зомбирование" населения через СМИ и телевидение. Однако не все задумываются о том, что похожие методы влияния на сознание, а точнее подсознание людей действуют и во всемирной сети Интернет.&lt;br /&gt;
&lt;br /&gt;
Проинформирован - значит вооружен. Этой статьей я хотел бы "вооружить" читателей в борьбе с внешним воздействием на сознание людей. Ну а кто-то, может быть, сможет применить полученные знания в общении с начальником, обсуждая повышение зарплаты ;-)&lt;br /&gt;
&lt;br /&gt;
Начнём издалека. В упрощённом варианте, когда мы рассматриваем мыслительный процесс человека, то говорим о &lt;b&gt;сознании&lt;/b&gt; и &lt;b&gt;подсознании&lt;/b&gt; человека.&lt;br /&gt;
&lt;b&gt;Сознание&lt;/b&gt; - это буфер человеческого мозга. Сознание напрямую взаимодействует с сенсорами человека - органами чувств. Мы получаем информацию, обрабатываем её и, если считаем её достойной, запоминаем - переносим информацию в долговременную память.&lt;br /&gt;
Вот &lt;b&gt;подсознание&lt;/b&gt; как раз оперирует данными из долговременной памяти. Человек не задумывается о том, как ему выйти из комнаты - просто выходит через дверь. Человек не будет "трогать" огонь - знание о вредоносности огня заложено в подсознании.&lt;br /&gt;
Мировоззрение человека строится на таких знаниях из долговременной памяти. В ранних стадиях развития человечества все знания достигались опытным путём: потрогал, обжёгся, запомнил. В наше время потребности в знаниях слишком велики, всего не достигнишь опытным путём. Как заработать в интернете, как играть на рынках акций, как сделать ремонт в квартире?... Таких вопросов миллионы. И человек ищет ответы на них в доступных для себя источниках.&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDRc_Hlw64IsBn1gOnoNQ78x7Go4UGeDf15jGxBw-HQGpYnMV1zeengNroFC9rAghOD25MxBn4hxykV0oiBd16HrxDVk6o_Jp_dkmqwkT5oUmWsm5u24yUCNjF58NhO9i4riACinXByGXB/s1600/metody-vozdejstviya-na-podsoznanie.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDRc_Hlw64IsBn1gOnoNQ78x7Go4UGeDf15jGxBw-HQGpYnMV1zeengNroFC9rAghOD25MxBn4hxykV0oiBd16HrxDVk6o_Jp_dkmqwkT5oUmWsm5u24yUCNjF58NhO9i4riACinXByGXB/s200/metody-vozdejstviya-na-podsoznanie.jpg" width="175" /&gt;&lt;/a&gt;&lt;/div&gt;Этим и пользуются те, кто хочет влиять на людей. Их главная задача - просунуть нужную им информацию в подсознание человека, обойдя сознание. Им не нужно, чтобы человек анализировал полученные факты и решал для себя их важность. Им нужно, чтобы люди безоговорочно запоминали нужные&lt;b&gt; алгоритмы поведения&lt;/b&gt;.&lt;br /&gt;
Я не буду заострять внимание на том, кому это нужно. Западным политикам, отечественным политикам, рекламщикам... да мало ли кому. На человека ежедневно обрушивается масса информации и правда в том, что часть "пропихивается" в подсознание, не привлекая к себе внимание.&lt;br /&gt;
&lt;br /&gt;
Таким образом, я перехожу к основной части статьи - &lt;b&gt;методам воздействия на человека&lt;/b&gt;. Если вы будете знать методы воздействия на своё посознание, то сможете вовремя осознать и распознать факт их применения. А значит сможете грамотно фильтровать потоки информации, защитившись от внешнего воздействия.&lt;br /&gt;
&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;Итак, методы воздействия на подсознание человека:&lt;br /&gt;
&lt;ol style="text-align: left;"&gt;&lt;li&gt;&lt;b&gt;Многократное повторение.&lt;/b&gt; Тут всё ясно. В *ндцатый раз увиденная реклама про Чудо йогурт натолкнёт вас на мысль о покупке рекламируемого продукта. Причём это желание у вас возникает не сразу же при просмотре этой рекламы, а непосредственно в магазине, когда вы скучающим взглядом пробегаетесь по полкам в поисках "чего-нибудь вкусненького". Самое интересное, что человек твёрдо уверен, что выбор обусловлен именно его мнением, а не навязыванием рекламой. Ну ну...&amp;nbsp;Интернет реклама действует похожим образом. В сотый раз увиденный баннер на разных сайтах натолкнёт вас на мысль о том, что можно попробовать эту продукт/партнёрку/услугу и т.д.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Когнитивный диссонанс.&lt;/b&gt; Это немного посложнее. Человеку даётся блок информации таким образом, что эта самая информация блокирует сознание человека, делая его не восприимчивым к запоминанию чего-либо. Этот метод чаще всего применяется ньюсмэйкерами. Смотрите вы новости, а там выдаётся ряд совершенно не связанных между собой событий и происшествий. В итоге, от такой кутерьмы сознание просто отключается. На следующий день вы сможете вспомнить, что вчера Буш что-то сказал, в Архангельске что-то случилось, а Путин куда-то поехал. Но вот что и куда... А чёрт с ними, лучше фильм посмотреть :) В этом плане чтение газет (интернет-порталов) куда предпочтительней, так как вы сами выбираете что и в какой последовательности вам читать. Также вы успеваете переварить полученную информацию, перечитать непонятные предложения, осмыслить ситуацию. Телевидение таких поблажек не даёт. Дикторы тараторят с такой скоростью, что осознание отходит на второй план. Тут успеть бы услышать...&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Эффект трояснкого коня.&lt;/b&gt; Великолепный "развод" человеческого сознания. Представьте, что вы только вчера узнали о том, что можно зарабатывать большие деньги в Интернете. Вы находитесь под впечатлением от услышанных фактов и цифр. Работу можно бросать, деньги будут сыпаться с сайтов, только успевай тратить. Чем впечатлительней человек, тем сильнее захватывается его сознание какой-либо новостью. Всё, пол дела сделано. Дальше нужно только вовремя подсунуть нужную рекламу или информацию. Почти со 100%-й вероятностью человек, захваченный подобной мыслью, пойдёт работать с первой же увиденной в рекламе партнёркой, купит первый же разрекламированный сервис или пакет услуг.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Группировка информационно-психологических вирусов.&lt;/b&gt; Название сложное, суть проста. Некий ресурс, допустим новостной, доставляет до вашего сознания некий блок полезной информации, правдивость которой не подвергается сомнению. То есть вы читаете абсолютную правду. Для себя вы определяете данный источник как правдивый и абсолютно достоверный. Далее этот источник постепенно уменьшает уровень достоверности, скатываясь до откровенно рекламных и проплаченных обзоров и статей. Но люди по-прежнему будут верить этому исключительно "достоверному" источнику.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;НЛП. Нейро-лингвистическое программирование.&lt;/b&gt; Это очень популярная в наше время технология. Применяется везде и всеми, кому не лень. Суть очень проста - воздействие на сознание человека одновременно по нескольким каналам. То есть вы одновременно видите, слышите и, например, чувствуете то, что хотят доставить до вашего сознания. В результате сознание, офигевающее от такого наплыва схожей информации на разные сенсоры, сдаётся и помещает информацию в долговременную память.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Подпороговые методы воздействия.&lt;/b&gt; Суть этого метода заключается в том, что человеку незаметно подкидывают нужную информацию. Самый распространённый пример - эффект 25го кадра. Хоть его эффективность и поставлена под сомнение (мол, ребята, хорош дурить, его же видно!), но сам метод работает. В качестве ещё одного примера можно привести фильмы. Главный герой популярного фильма ходит с новеньким мобильником, пусть даже и не суёт его в каждый пятый кадр. Но продажи этого мобильника увеличиваются. Замените героя фильма на популярного блогера, а новенькую мобилу на упоминание активного использования какого-либо платного сервиса. Стоит ли говорить, что случаи покупки лицензии на использование этого сервиса резко возрастают. Заметьте, я говорю не об активной рекламе, а о простом упоминании. Как бы "между прочим".&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Авторитетность источника.&lt;/b&gt;&amp;nbsp;Это даже не столько метод, сколько обязательное свойство источника информации. Очень тесно пересекается с предыдущим методом. Чем авторитетней человек, рекламирующий что-либо, тем больше людей поверят ему.&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;&lt;br /&gt;
Вот и всё. Я рассмотрел &lt;b&gt;7 основных методов воздействия&lt;/b&gt; внешних сил &lt;b&gt;на подсознание человека&lt;/b&gt;. Я старался приводить примеры из жизни интернета. Хоть они и оказались притянутыми за уши, но суть, думаю, ясна. Не стоит свято верить всему, что рекламируется или пропагандируется. Имейте своё мнение и фильтруйте реально полезную информацию от специально внушаемой.&lt;br /&gt;
&lt;br /&gt;
Удачи!&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;----&gt;&gt;&gt;
&lt;a href='http://omskblog.blogspot.com'&gt;Блог коренного Омича&lt;/a&gt;.&lt;/div&gt;</description><link>http://omskblog.blogspot.com/2009/03/vozdejstvie-na-podsoznanie-cheloveka.html</link><author>noreply@blogger.com (Артемий)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" height="72" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkS1xZLQxXki7eDhCzf29ECbxJyP9Hh0PEZ5mdRO5jHVrQhP0hk5sGGxfrQHJdeCyJJ9qZJebplnSR-TT9rWF5opMsN2VP4UEhDKFsF7KHFCxzydgwEx4BCHJx3tADTRMRFkqY8PuGp9c-/s72-c/vozdejstvie-na-podsoznanie.jpg" width="72"/><thr:total>28</thr:total></item></channel></rss>