Архивы за Октябрь 2007

Получаем от Google больше 1000 ссылок

Статистика назойливо показывает, что на мой сайт каждый день приходят посетители по запросу “больше 1000 ссылок в Google” и ему подобным. Поэтому я решил вынести тему получения более 1000 ссылок в выдаче Google в отдельный пост.

Итак. Есть следующие основные пути получения в выдаче более 1000 сайтов:

  1. Использование дополнительного оператора (иногда еще называют модификатора) site.

    Расскажу как можно это использовать на простом примере.Например вам надо собрать 5 000 ссылок по запросу “sex” (первое что пришло в голову).

    Тогда вы можете составить следующий список запросов для выполнения своим парсером:

    sex site:com
    sex site:org
    sex site:net
    sex site:info
    sex site:biz

    Это соберет все сайт, в чьих доменных именах есть слово sex и которые принадлежат к зоне com, net, org, info и biz. Если же надо собрать все сайты, которые просто содержат это слово и принадлежат к вышеуказанным доменам, то надо выполнить следующие запросы (сделать небольшую перестановку):

    site:com sex
    site:org sex
    site:net sex
    site:info sex
    site:biz sex

    И в результате распарсив выдачу Гугла вы получите желанные 5 000 ссылок.

    Также на некоторых форумах я видел новомодный метод сбора только доменных имен с “-” в имени. Для нашего запроса он будет имеет следующий вид:

    sex site:com -site:*com

    Данный запрос соберет все домены, у которых в имени есть слово sex и “-” (тире). Однако люди занимающиеся SEO знают, что домены с тире в имени попадают под некоторые определенные фильтры Гугла, что само по себе понижает их ценность. Но если уж слишком надо, то можно и таким запросом пользоваться.

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

    site:com -site:*com sex

    При помощи подобных инструментов можно получить просто немерянно ссылок по практически любому запросу. Особенно ВЧ англоязычному.

    Полный список доменных зон для подобных махинаций с запросами вы можете найти тут: ccTLD (региональные) | gTLD (general).

  2. Использование уточняющих слов.

    Про это я уже детально рассказывал. Главное - просто добавляйте к своему запросу еще по уточняющему слову.

  3. Синонимизация.

    Очень непростой и неоднозначный инструмент, которым, по моим наблюдениям, пользуются только некоторые профи.

    Принцип действия данного метода достаточно простой. Собирается (или чаще всего покупается) база синонимов. Потом на основе этой базы делается замена слов в запросе на синонимы. Таким образом вы увеличивается массу собранных ссылок.

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

  4. Танцы с бубном и прочими оператора (модификаторами) Гугла.

    Это такой обобщенный метод. Используется в основном для сбора баз для спама, поэтому я расскажу о нем вкратце.Метод основан на использовании всевозможнейших операторов: inurl, intitle …

    В основном спамеры используют запросы с inurl: script.php, что помогает им находить определенные движки, которые они умеют спамить. Но это совсем не интересно и не ко мне.

Дополнительная информация:

  1. ccTLD
  2. gTLD
  3. описание основных операторов (/модификаторов) запросов к Google
  4. Google Hacks (2nd Edition) (книга про всевозможнейшие трюки с запросами)

Проблемы с RSS устранены

Только сегодня заметил, что из-за кривого плагина статистики на блоге не работает RSS лента.

Плагин статистики удалил, а весь RSS траффик пустил через FeedBurner, так что теперь прошу всех моих подписчиков поменять адрес RSS сайта ParserPro на этот.

Спасибо.

Новая работа. Парсер поиска по Яндекс.Директ

На этот раз я разработал парсер поиска по Яндекс.Директу.

Возможности разработки:

  • парсинг количества результатов
  • работа через прокси
  • сохранение результатов в CSV
  • отдельное хранилище для высокочастотных запросов (порог вхождения устанавливается пользователем)
  • возможность установки таймаутов между запросами
  • контроль процесса обработки запросов: возможность запуска парсера с точки остановки без необходимости перезапуска всего процесса
  • контроль и просмотр результатов «на лету»: до окончания процесса парсинга возможен просмотр результатов и их обработка (по уже пропарсенным запросам)
  • INBOX для хранения результатов парсинга всех групп запросов

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

P.S. На носу еще парочка полезных инструментов, так что следите за новыми постами. Я уверен, что вы сможете найти что-то интересное для себя.

Кодекс чести парсинг-самурая

Данную заметку я написал для людей, которые всерьез занимаются парсингом и сбором информации.

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

Как по мне это совершенно неправильно, ведь помните как говорится - “Поступай с ближним так, как ты хочешь чтобы он поступал с тобой”. И исходя из этого изречения я постарался сформулировать несколько тезисов для профипарсеров:

  1. Перед началом работы проанализируйте статистику сайта-источника и выберите оптимальное для парсинга время.
    В настоящее время сделать это достаточно просто, так как большинство интересных и стоящих сайтов участвуют во множестве рейтингов, где можно увидеть их посещаемость не только по дням, но и по часам, что особенно важно. Благодаря этому вы можете подобрать время, когда сервер максимально разгружен. Чаще всего это период между 3-7 часами утра.
    Но это не значит, что вы должны в 3 часа утра сидеть перед компом. От вас требуется всего лишь нормально настроить свой компьютер, веб-сервер, поставить на компе будильник (есть такая опция в BIOS Setup) и правильно настроить крон для запуска скриптов.
    А если вы используете сервер хостера, то и того проще - просто поставить скрипт на крон.
    У этого совета есть еще и практически полезная сторона - в ненагруженные часы вы будете получать ответы от сервера-источника на порядок быстрее, чем в “час-пик”, что ускорить парсинг информации и поможет избежать перегрузок на второй стороне.
  2. Разбивайте процесс парсинга на максимальное количество независимых процессов.
    Очень часто процесс парсинга является двухуровневым или даже трехуровневым (или еще лучше сказать двухпроходным или трехпроходным), то есть происходит в несколько этапов: сбор ссылок -> парсинг страницы или проход каталога -> сбор ссылок (или прочих параметров) -> парсинг конечных страниц.
    И я в своей работе каждый этап стараюсь реализовать разными скриптами и запускать их в разные промежутки времени, чтобы снизить нагрузку на конечный сервер.
    Это очень удобно и в практическом плане позволяет разделить логику работы скрипта, что несомненно улучшает контроль за процессом и позволяет сделать этапы сбора информации независимыми.
    Конечно же минусом такого разбиения является увеличение времени разработки. Но поверьте, если проект крупный, то затраченное на этой стадии время окупится вам с лихвой.
  3. Ставьте паузы между запросами.
    Это важный момент (и парсеры поисковиков знают о чем я говорю :)). И вам не стоит его игнорировать.
    Если ваш парсинг предполагает обработку большого объема информации, то вам стоит добавить между запросами небольшие паузы, которые помогут разгрузить удаленный сервер. В противном случае вы можете забить пул запросов и сайт-источник может плавно умереть. И это поверьте мне это очень плохо, потому что тогда ваши действия могут трактовать как (D)DoS-атаку, а это уже уголовно наказуемо.
    В своей работе работе я, в основном, использую паузы длиной 100-500 мск.
  4. Используйте весь возможный инструментарий для снижения объемов передаваемой информации.
    При возможности (если это позволяет сервер-источник) используйте Content-Range в своих HTTP запросах (у curl для этого есть опция CURLOPT_RANGE). Это позволит вам сэкономить как свой траффик, так и траффик сервера-источника.
    К моему удивлению, Яндекс чего-то не захотел обрабатывать данный HTTP запрос.

Это основные правила, которых, как я считаю, должен придерживаться каждый профи и в основе которых лежит уважение к работе других.

И на последок хочу напомнить, что ваш парсер/граббер в определенный промежуток времени создает нагрузку на порядок больше, чем броузер обычного пользователя. Ведь у парсера не тратится время на рендеринг, парсер не подгружает картинки (если вы ему этого не сказали) и поэтому парсер “листает” страницы сайта-источника на порядок быстрее, чем пользователь. Поэтому не стоит наращивать скорости, потому что вы можете просто “завалить” сервер-источник.

Дополнительные ссылки:

Новые работы

На днях закончил выполнение очередного заказа. На этот раз мною были собраны 2 базы

  1. База предприятий Украины;
  2. База предприятий Киева.

Немного опишу эти базу для потенциальных покупателей.

  1. База предприятий Украины
    Всего записей в базе: 9 977
    Всего категорий: 17
    Форматы: CSV | MySQL dump
    Всего подкатегорий: 15 (подкатегории есть лишь у небольшого числа компаний, основной упор делается на категорию, которая есть у каждой компании)
    Данные, представленные в базе: название, форма собственности, зкпо (пустое значение, оставлено для совместимости с другими базами), направление деятельности (внутренний рынок, экспорт, импорт…), вид деятельности (торговля, услуги, производство), рынки (Украина, Россия …), адрес, телефон (городской, мобильный), факс, e-mail, продукция, услуги.У каждой фирмы то или иное поле может быть пустым.

    Стоимость базы: 30 $.

  2. Просмотреть пример базы (10 записей | CSV)

  3. База предприятий Киева
    Всего записей в базе: 6 722Данная база полностью повторяет структуру базы предприятий Украины, с тем отличием, что представлены исключительно киевские компании.

    Данная база является частной выборкой из базы предприятий Украины.

    Стоимость базы: 20 $.

  4. Просмотреть пример базы (10 записей | CSV)

4 шага к правильному сбору и обработке информации

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

Для работы над любым удачным проектом по сбору и обработке информации нужно:

  1. Определить все значимые параметры собираемой информации.
    Это очень важный этап, который все непонятно почему пытаются пройти как можно быстрее (наверное хотят побыстрее заработать).
    Пример.
    Заказчик попросил вас собрать базу компаний и вы без особых размышлений кинулись в бой.
    Но тут не стоит спешить. Надо уточнить:

    • по какому региональному признаку отбирать компании?
    • каким видом деятельности должны заниматься отбираемые компании?
    • какой юридической формы собственности надо отбирать предприятия?

    Нужно собрать как можно больше значимых признаков.

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

  2. Найти источник информации
    На данном этапе следует произвести детальный поиск источника (источников) информации, который максимально удовлетворил бы всем значимым параметрам, которые вы определили в пункте 1. И поверьте мне, это не так уж и просто, как может показаться на первый взгляд. Поэтому я советую вам не концентрироваться на поиске какого-то одного идеального источника, а составить какую-то небольшую таблицу вариантов, из которых вы потом сможете выбрать самый лучший.
  3. Определить форму представления информации
    Если вам надо собирать все подряд и как попало, то этот этап вы можете смело откинуть.
    В противном случае стоит определить какие параметры вам стоит собирать, а какие не стоит.
    Например, очень часто у меня появляются заказы на сбор базы данных людей. Например, IT специалистов. Источником для такой информации выступают сайты поиска работы и профессиональные сайты. Но на том же сайте поиска работы в IT специалисты попадают даже наборщики текстов, которые, понятное дело, не нужны моему заказчику. Поэтому на основе данных, полученных в пункте 1, я составляю список совпадений и исключений, который и использую при сборе и анализе информации.
  4. Выбрать средства для сбора информации
    Для меня это очень просто – настроил парсер (хотя мне больше нравится слово паук) и в бой.
    А если у вас нет соответствующих навыков, то вы можете заказать подобную услугу у профессионалов, либо прибегнуть к каким-то программным средствам, которые уже далеко не редкость.Тут главное подобрать что-то достаточно гибкое и быстрое. Скорости стоит уделить особое внимание, потому что порой приходится собирать базы в миллионы записей и промедления даже в доли секунды на таких объемах будут значимыми.

Вот и все. Надеюсь, что мне удалось дать вам понимание процесса качественного сбора и анализа информации.

Если у вас будут вопросы, заказы или предложения – свяжитесь со мной.

Удачи!

Google limits

Данную статью я назвал Google Limits, потому что в ней я хочу рассказать о некоторых ограничениях поиска в Гугл:

  1. Запрос не должен превышать 32х слов (раньше было 10);
  2. Количество запросов с одного IP не должно превышать 25 000 в сутки.

По поводу первого числа у меня нет сомнений, а вот по поводу второго они все-таки возникают. Хотя на практике еще не приходилось подходить к барьеру в 25 000 запросов.

Надо будет как-то на эксперименте проверить.

Яндекс ТИЦ

Иногда нам (веб-разработчикам и веб-оптимизаторам) нужно получить скриптом (потому что сервисов, которые это делаю за нас просто немеряно) такой параметр страницы как ТИЦ.

Введен этот чудный параметр был компанией Яндекс, поэтому все дружно его и называют Яндекс ТИЦ.

Для его нахождения я использую следующий простой скрипт:

function GetTCY($url) {		
   $url="http://bar-navig.yandex.ru/u?ver=2&show=32&url=".$url;
   $Result=file_get_contents($url);		
   return $Result ? (int) substr(strstr($Result, 'value="'), 7) : false;
}

Этой функции вы можете скармливать URL любого сайта, чей ТИЦ вы хотите узнать.

Данный метод основан на том же принципе, что и Яндекс.Бар.

Если вы уже очень любознательны, то в ответ на наш запрос Яндекс возвращает XML файл следующего вида:

<?xml version="1.0" encoding="windows-1251" ?>
<urlinfo>
 <url domain="www.net-safari.com"><![CDATA[/]]></url>
 <tcy rang="2" value="20"/>
 <topics>
 </topics>
 <textinfo>
 </textinfo>
</urlinfo>

Также вы можете скачать данный код в готовом виде отсюда.

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

Дополнительные сведения:

Выдача Google

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

Например, надо получить ссылки по запросу “собаки”. Тогда можно сформировать пакет запросов следующим образом:
“собаки красивые”
“собаки спасатели”
“собаки и приключения”
“собаки фото”

Думаю, что общая мысль понятна.

Парсинг выдачи Google. Практика.

Очень часто перед веб-мастерам встает задача парсинга выдачи поисковиков.

Это может быть нужно для того, чтобы:

  • автоматизировать процесс обработки какой-то статистической информации;
  • посчитать количество ссылающихся на ваш сайт ресурсов, определить их качество и прочие параметры;
  • найти урлы сайтов, которые натырили у вас контент (хотя тут лучше использовать что-то наподобии CopyScape, однако я заметил, что он иногда выдает бред);
  • определить частоту запросов.

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

А ведь еще у нас есть такие ребята как серые и черные оптимизаторы, которые при помощи поисковика ищут спамилки. Но это вообще отдельный разговор, который ничего общего с нашими благими целями не имеет :)

В данной статье я хотел бы рассказать как проще всего из выдачи Google доставать такие параметры как:

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

Реализовывать механизм получения выдачи вы можете на чем угодно: curl, сокеты, fopen. Особой разницы для нас между ними нет. Предположим, что получать содержимое выдачи вы уже умеете (а если не умеете, то читать дальше вам просто незачем).

И вот тут начинаются вопросы.

1. Как достать из выдачи время генерации и количество страниц на данный запрос?

Я делаю это таким кодом (выдрано из тучи моих классов и гигантского ядра парсера, так что если найдете какую-то ошибку - напишите в комментах):

$blue_line_pcre = "(Результаты|Результати|Results)(.*)";
$parse_time_pcre= '\<b\>([\d\,\.]+)\<\/b\>\s[^\d]+$';
$parse_num_pcre	= '\<b\>([\d\,]+)\<\/b\>[^\d]+';
 
if(preg_match("/$blue_line_pcre/Ui",$Result,$matches)) {
    unset($matches[0]);
    if(!empty($matches[1])) {
        $BlueLine=preg_replace("/\&nbsp\;/",'',$matches[2]);
    } else {
        $BlueLine='';
    }
}
 
$find=$parse_num_pcre.$parse_time_pcre;
if(preg_match("/$find/Ui",$BlueLine,$matches)) {
    unset($matches[0]);
    $query_results_num=$matches[1];
    $query_time=$matches[2];
}

То есть, предполагается, что в переменной $Result хранится html код выдачи (и очено важно к этому коду не забыть применить

$Result=preg_replace("/[\n\r\t]/", '', $Result);

, чтобы потом не ломать голову почему половина регулярок не работают).
После выполнения моего скрипта в переменной $BlueLine будет html код синей полоски Гугла, в которой будет написано, что-то на подобии “Результаты 1 - 10 из примерно 87 300 000 для вакансии. (0,04 секунд)”.

В переменной query_results_num будет количество сайтов, подходящих под ваш запрос, а в переменной query_time - время генерации выдачи.

Из кода выше вы могли заметить, что регулярное выражение для нахождения кода “синей линии” имеет следующий непонятный вид:

(Результаты|Результати|Results)(.*)

Это сделано исключительно для того, чтобы с равной точностью парсить выдачу как google.com, так и google.ru и google.com.ua.

Заметка: результаты выдачи по одному и тому же запросу на разных локализованных версиях Google отличаются! Хоть иногда эту разницу тяжело обнаружить, но все же она есть. Можете на досуге поиграться с каким-то ВЧ запросом. Расскажете о результатах своих наблюдений.

Также некоторые вопросы могут вызывать регулярные выражения для нахождения времени генерации и количества страниц:

$parse_time_pcre = '\<b\>([\d\,\.]+)\<\/b\>\s[^\d]+$';
$parse_num_pcre	= '\<b\>([\d\,]+)\<\/b\>[^\d]+';

Для чего я использую вот такие конструкции [\d\,\.]? Исключительно для совместимости. Делаю я это потому, что разделителем целой и дробной части в нашей стране является “.”, а в США - “,”. В регулярном выражении для количества страниц вы также можете видеть символ “\,” - это используется для того, чтобы правильно находить количество страниц, так как американцы разделяют тысячи этим знаком.

2. Как достать ссылки из выдачи?

Эта даже проще чем выдирать параметры. Я делаю это при помощи следующего кода:

$find = $parse_links_pcre = "<a\shref=\"([^\"]+)\".*sclass=l";
if(preg_match_all("/$find/Ui",$Result,$matches)) {
    unset($matches[0]);
    $links=$matches[1];
}

В массиве $links будут все ссылки, найденный на текущей странице. Недостатки у такой унификации тоже есть: в результирующем массиве вы получите все ссылки “Translate” и этот метод не очень-то и быстро работает из-за использования в регулярном выражении “.*”. Но это место всегда можно подрихтовать под ваши конкретные требования. В оригинальном виде я тоже не особо часто использую данное регулярное выражение. Но есть также и плюсы у этого кода: он не загребает ссылки с оплаченных объявлений, а они, как вы знаете, вылазят на каждой странице поиска и могут очень сильно нарушить ваши статистические исследования или сбор ссылок.

Спасибо, что дочитали до конца. Рад буду выслушать ваши предложения и дополнения.