Гуглопарсер

VHS
На сайте с 28.09.2007
Offline
142
VHS
488

Всем привет! Тема стара как мир, и многие наступали на эти грабли, поэтому хотелось бы узнать у бывалых ряд моментов...

Есть желание написать небольшой парсер гугловыдачи, исключительно в целях снятия позиций по ключевикам одного сайта. То есть 200-300 словосочетаний. Пробивку хотелось организовать по крону, прямо с сервера на котором лежит сайт.

Соответственно вопрос - есть ли зависимость включения капчи от частоты запросов?

Есть ли смысл химичить с рандомными параметрами запроса выдачи, или нет?

Быстро ли отпускает гугл из-под капчи/бана?

VHS
На сайте с 28.09.2007
Offline
142
VHS
#1

Что, реально никто не делал? =(

ishipilov
На сайте с 25.12.2011
Offline
101
#2
VHS:
Быстро ли отпускает гугл из-под капчи/бана?

несколько часов.

А вообще можно использовать апи гугла, например так:

http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=hello

где q - это запрос

VHS
На сайте с 28.09.2007
Offline
142
VHS
#3

Спасибо за ответ. Апи ненравится тем, что результаты абсолютно неадекватны обычной выдаче. Проверял на ряде запросов, в чем именно дело разбираться не стал, ну и конечно выдача из 4 позиций...

Пока думаю делать так -


<?
include ('simple_html_dom.php');
$url = "https://www.google.ru/search?num=100&q=".urlencode($query);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36");
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_REFERER, "https://www.google.ru/");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);

curl_setopt($ch, CURLOPT_POST, 0);

$html = str_get_html(curl_exec($ch));

if($html->find('div.srg') === null){
die($html->outertext);
}

$ret = array();
foreach ($html->find('div.srg li') as $el) {
$array = array();
foreach ($el->find('h3 a') as $anchor) {
$array['link'] = $anchor->href;
$array['title'] = $anchor->plaintext;
}
foreach ($el->find('span.st') as $text) {
$array['desc'] = $text->plaintext;
}
if(!empty($array))
$ret[] = $array;
}

print_r($ret);
?>

Результат совпадает на 100%, даже несмотря на то, что скрипт запускается с сервера, то есть региональность по айпи клиента не влияет.

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

K
На сайте с 03.06.2015
Offline
45
#4

В api небось все купленное не выдается.

MYSQL PHP JS HTML CSS SEO TXT США СССР
TF-Studio
На сайте с 17.08.2010
Offline
334
#5

Прокси надо.

Через месяц-другой, ip в бан уйдет. (я свой забанил, поставил прокси и всё работает)

Благо прокси дешевые, так что не оч сложно будет.

Всё ещё лучший способ заработка для белых сайтов: GoGetLinks (https://www.gogetlinks.net/?inv=fahbn8).
V
На сайте с 20.04.2010
Offline
93
#6

А может х-парсер купить та и все? Там любую выдачу можно взять...

VHS
На сайте с 28.09.2007
Offline
142
VHS
#7
Vladrom:
А может х-парсер купить та и все? Там любую выдачу можно взять...

А зачем? Вышеозначенный код прекрасно работает. Подкрутить Я.XML еще несколько строчек кода. Прокси - не проблема. Задача достаточно простая. Или ты вызываешь мастеров, когда тебе лампочку надо поменять?

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

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий