Home → Php →

Примитивный PHP парсер e-mail адресов из поисковой выдачи

Опубликовано в вс, 07/27/2014 - 11:07

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

Изучаем пациента

Для начала посмотрим как строится GET запрос яндекса. Для этого вбиваем в поисковую строку какой-нибудь запрос, например, "ремонт кондиционеров". В расширенных настройках поиска выбираем регион, например СПб, и количество результатов на одной странице (чем больше тем лучше), но у яндекса стоит ограничение в 50 результатов на одной странице. В итоге получается 20 страниц выдачи по 50 результатов на каждой странице = 1000 сайтов для парсинга, для одного ключевого запроса. Но нам нужны не просто главные страницы сайтов, нам нужны страницы с контактами откуда мы будем выдирать e-mail адреса, поэтому наш запрос будет выглядеть так - "ремонт кондиционеров e-mail". Смотрим в адресную строку http://yandex.ru/yandsearch?p=1&text=ремонт%20кондиционеров%20e-mail&numdoc=50&lr=2, что здесь видим:

  • "p=1" - это номер страницы выдачи (всего их 20ть)
  • "text=ремонт%20кондиционеров%20e-mail" - это сам ключ запроса
  • "numdoc=50" - количество результатов на странице
  • "lr=2" - регион

Автоматизируем рутинный труд средствами PHP

В нашем скрипте мы не будем представляться браузером, имитировать действия пользователя, поэтому ранее я писал, что парсер примитивен, но при желании можно прикрутить всю эту лабуду. Создаем на локальной машине файл yandex.php, в него пишем следующее:


<?php

     // Создаем человекопонятный поисковый запрос
     
$query = "Автомобильный салон";

     // Задаем переменную с номером страницы
     
$i = 6;

     // Задаем переменную с кодом региона
     // регион 2-Спб 213-Москва 65-Новосибирск 54-ЕКБ
     
$region = 2;                   

     // Все части запроса в отдельных переменных, в дальнейшем их будет удобно изменять
    
     // Преобразуем ключевое слова под формат GET запроса
     
$query = str_replace(" ", "+", $query);
     
// Присоединяем к поиску "e-mail"
     
$query .= '"e-mail%3A"';
     
// Получаем готовый url
     
$url = "htt p://yandex.ru/yandsearch?p={$i}&text={$query}&numdoc=50&lr={$region}";

     // Запрашиваем страницу по сформированному url, сохраняем в $str
     
$str = file_get_contents($url, false, $context);
     
// Выводим страницу для просмотра в браузере
     
print $str;
     
// С помощью регулярного выражения из загруженной страницы ищем "@"
     // и заносим сам e-mail в массив
     
preg_match_all("/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/",$str,$matches);
     
$urls[] = $matches[0];

     // Пишем результат в файл
     
$fb = fopen('email-yandex.txt', 'write');
     
// Делаем разделителем запятую
     
fwrite($fb, implode(",",$urls[0]));

?>

Вот и все. Запускаем денвер. В браузере запрашиваем наш файл localhost/yandex.php, после запуска в файле email-yandex.txt записываются все e-mail'ы со страницы, в коде меняем переменную $i на единицу больше (листаем страницу вперед), обновляем localhost/yandex.ru, забираем новые адреса.

Конечно можно было бы сделать изменение $i через цикл for, но тогда яша нас быстро палит и дает капчу, поэтому я написал, что парсер полуавтоматический.

парсер
yandex
регулярные выражения
e-mail

Menu

  • Главная
  • О блоге

Category

Drupal
(15)
Php
(4)
Верстка
(2)
Разное
(2)
lakshtori.ru (Лакштори,luckshtory) - бренд мошенников
© by Conocube / Блогу - 4422 дня