Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Позиция в Yandex / 5 сообщений из 5, страница 1 из 1
26.01.2014, 00:25
    #38537969
Позиция в Yandex
Возникла идея получать через PHP позицию сайта в Yandex-е по тому или иному запросу.
Есть идеи?

Можно ли через php, открыть yandex, вбить запрос и нажать "поиск", а зачет пробежаться по страничкам, пока не появится имя сайта моего?

В каком направлении искать?
...
Рейтинг: 0 / 0
26.01.2014, 00:28
    #38537970
ScareCrow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиция в Yandex
curl.

чаще раза в минуту не опрашивать - ато забанит
...
Рейтинг: 0 / 0
26.01.2014, 01:09
    #38537979
Позиция в Yandex
ScareCrow,

посмотрела в википедии, не совсем понятно, а как это внедрить на мою php страничку?
Не могли бы вы дать код? Спасибо!
...
Рейтинг: 0 / 0
26.01.2014, 01:16
    #38537981
Програмёр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Позиция в Yandex
Евгения ЧупроваВозникла идея получать через PHP позицию сайта в Yandex-е по тому или иному запросу.
Есть идеи?

Можно ли через php, открыть yandex, вбить запрос и нажать "поиск", а зачет пробежаться по страничкам, пока не появится имя сайта моего?

В каком направлении искать?

Ещё одно задание?

Если нет, то на практике мало кто бегает по поисковикам своими силами, а чаще прибегают к помощи специализированных сервисов (у которых работают полноценные роботы).

Вот как например на нашем сайте это делается:
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
  //сбор позиций в выдаче Яндекса и Гугла (через megaindex.ru)
  public function actionGetYandexGooglePlace($myMail, $myPass){
    $curl = curl_init('http://www.megaindex.ru/login.php?action=process');
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_COOKIEFILE, 'cookies');
    curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookies');
    curl_setopt($curl, CURLOPT_POSTFIELDS, "email_address={$myMail}&password={$myPass}&login_memo=1");
    
    curl_exec($curl);//логинимся
    if(curl_errno($curl) != 0){   
      echo 'Q1: Ошибка CURL: '.curl_error($curl);  
      return;
    }

    curl_setopt($curl, CURLOPT_URL, 'www.megaindex.ru/index.php?tab=mySite');
    $text = curl_exec($curl);//читаем список сайтов
    if(curl_errno($curl) != 0){   
      echo 'Q2: Ошибка CURL: '.curl_error($curl);  
      return;
    }

    $text = iconv("CP1251", "UTF-8", $text);
    preg_match_all('#<a title="Перейти на сайт"[^>]*>([^<]*)</a>.*?<a href=".*?&site_id=([^&"]*)[^"]*"#ims', $text, $sites_array, PREG_SET_ORDER);
    $sites = array();
    foreach($sites_array as $site){
      $sites[$site[1]]=$site[2];
    }
    $sites = array_reverse($sites, true);

    //читаем данные по сайтам
    foreach($sites as $site=>$site_id){
      curl_setopt($curl, CURLOPT_URL, "http://www.megaindex.ru/index.php?tab=aSeo&do=aseoWord&site_id={$site_id}");
      $text = curl_exec($curl);
      if(curl_errno($curl) != 0){   
        echo 'Q3: Ошибка CURL: '.curl_error($curl);  
        return;
      }

      //парсим данные по сайтам
      $res_queries = array();
      $text = iconv("CP1251", "UTF-8", $text);
      $text = preg_replace('#<script[^>]*>.*?</script>#ims', '', $text);
      $text = preg_replace('#<style[^>]*>.*?</style>#ims', '', $text);
      if(preg_match('#<table class=s0p0>(.*)<input type=submit class=submit#ims', $text, $matches)){
        $res = $matches[1];
        do{
          $before_res=$res;
          $res = preg_replace(
            array(
              '#<table[^>]*>.*?</table>#ims',
              '#<input[^>]*>#ims',
              '#<img[^>]*>#ims',
              '#<br[^>]*>#ims',
              '#<a[^>]*>(.*?)</a>#ims',
              '#<span[^>]*>(.*?)</span>#ims',
              '#<div[^>]*>(.*?)</div>#ims',
              '#<b[^>]*>(.*?)</b>#ims',
              "#\\t#ims",
              "#\\r\\n(\\r\\n)+#ims",
              "#&nbsp;#ims"
            ), array('', '', '', '', '\\1', '\\1', '\\1', '\\1', '', "\n", ''), $before_res);
        }while($before_res!=$res);
        if(preg_match_all('#<tr[^>]*>(.*?)</tr>#ims', $res, $rows)){
          $res_rows = array_slice($rows[1], 2, -4);
          $time = time();
          foreach($res_rows as $row){
            if(preg_match_all('#<td[^>]*>(.*?)</td>#ims', $row, $colls)){
              $res_colls = $colls[1];
              $yandex = intval($res_colls[4]);
              $google = intval($res_colls[5]);
              $res_queries[]=array(
                'site'=>$site,
                'query'=>trim($res_colls[1]),
                'yandex'=>($yandex!=0 ? $yandex : 1000),
                'google'=>($google!=0 ? $google : 1000),
                'time'=>$time
              );
            }
          }
        }else{
          echo "error (could not find rows)\n";
        }
      }else{
        echo "error (could not find table)\n";
      }
      //пишем данные в базу
      foreach($res_queries as $row_properties){
        $row = new YandexGoogle;
        $row->setAttributes($row_properties);
        $row->save();
      }
      echo "$site - saved\n";
      sleep(1);
    }
    curl_close($curl);
    echo "done\n";
  }



Соответственно регистрируемся на сервере, забиваем список сайтов для отслеживания... и стягиваем оттуда нужные нам позиции (посредством парсинга страниц, уже программно).

У нас это всё стоит на кроне, что бы не задалбывать сервак (раз в несколько часов происходит парсинг сайта и обновление локальной базы)... при такой схеме нас никто не банет (да и не за чем), а мы владеем актуальными данными (ну или почти актуальными, но в данном случае задержка в час-два роли не играет)
...
Рейтинг: 0 / 0
26.01.2014, 14:14
    #38538210
Позиция в Yandex
Програмёр,
Ой, спасибо большое. Буду пробовать!
Если только с LInux-ом разберусь. А то я вчера какой-то сервис "отрубила" случайно )))
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Позиция в Yandex / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]