Парсинг выдачи Яндекса

Статус
В этой теме нельзя размещать новые ответы.

Alix

Гуру форума
Регистрация
27 Янв 2008
Сообщения
234
Реакции
86
Народ, может кто сталкивался с подобной траблой - при попытке "поспрашивать" Яндекс о индексации определенных доменов вылазит еггог вида

400 Bad Request​
nginx/0.6.31​

Подробности: дергаю через курл подобным образом:
PHP:
    $ch = curl_init('http://www.yandex.ru/yandsearch?serverurl='.$link);
    curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_POST, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 20);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
Причем есть еще одна особенность - резалты по первому домену отображаются норм, а вот по всем последующим - вышеописанный еррор. В какую сторону копать?
 
А что ты пишешь в $user_agent ?
 
А если так ?
PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://www.yandex.ru/yandsearch?serverurl='.$link);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
последовал совету D@nil, все заработало. D@nil, можно пару комментариев насчет "ввв" и "без ввв". В чем в данном случае соль?

denover, $user_agent = "Mozilla/4.0 (compatible; MSIE 6.01; Windows NT 5.1)". Имхо разницы в твоем и моем коде существенной нет. Во всяком случае еггоги теже самые, если .зать с "ввв". Так что ждем комментариев D@nil-a.
 
Ну ещё не забывай про паузы между запросами или прокси...

Добавлено через 6 минут
последовал совету D@nil, все заработало. D@nil, можно пару комментариев насчет "ввв" и "без ввв". В чем в данном случае соль?

FOLLOWLOCATION не всегда отрабатывает?

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

В теории, возможно, что при частом запросе c www yandex палит работу скрипта быстрее чем без
 
Ну ещё не забывай про паузы между запросами или прокси...


Да, слип стоит - 20 сек. Хотя бана от SE за парсинг еще не получал :)


FOLLOWLOCATION не всегда отрабатывает?

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

Посмотрел, действительно кидает на урл без "ввв". Да уж, интересно как это FOLLOWLOCATION тогда себя ведет. Неясная закономерность - хуже дефекта :)
 
Вопрос в тему
Может кто-нибудь сталкивался с подобной проблемой
Пытаюсь загрузить карточку товара с яндекс.маркета
Вот код
PHP:
<?php
function get_page ($url, $proxy=FALSE)
{
	global $agent, $header;  
	if($proxy != FALSE) 
	curl_setopt($ch, CURLOPT_PROXY, $proxy);
	curl_setopt($ch, CURLOPT_URL, 'http://market.yandex.ru/search.xml?cvredirect=1&text=Nokia+6500'); 
	curl_setopt($ch, CURLOPT_HEADER, 1);
	curl_setopt($ch, CURLOPT_TIMEOUT, 60);
	curl_setopt($ch, CURLOPT_REFERER, 'http://www.google.com.ua');  
	curl_setopt($ch, CURLOPT_USERAGENT, $agent);
	curl_setopt($ch, CURLOPT_HTTPHEADER , $header );
	curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);  
	curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
	curl_setopt($ch, CURLOPT_COOKIEJAR, dirname(__FILE__) . "/cookie.txt");
	curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__) . "/cookie.txt");
	curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);
	$result = curl_exec($ch);

	if (!$ch) 
		return false;
	
	if (curl_errno($ch)) 
	{ 
		curl_close($ch);
		return false;
	}
	curl_close($ch);
	return $result;
}
?>

Никак не происходит редирект
Заранее благодарен всем откликнувшимся
 
можно пару комментариев насчет "ввв" и "без ввв". В чем в данном случае соль?
Яндекс ввел редирект с Для просмотра ссылки Войди или Зарегистрируйся на yandex.ru чтоб срезать разнообразные парсеры и скрипты.
+ Для красоты :)

Сейчас все актовно обновляют прожки и скриптики :)
 
Скрипт получения ТИЦ

Вот простенький скрипт получения ТИЦ. Может кому пригодится?
PHP:
$host = $_GET['host']; if (empty($host)) exit();
$html = preg_replace('/[\r\n]/','',join(file("http://search.yaca.yandex.ru/yca/cy/ch/$host/")));
if (strlen($html)>100)
  if (strpos($html,iconv('WINDOWS-1251','UTF-8','ресурса меньше 10'))!==FALSE) echo 'CY < 10';
  elseif (ereg('&#151; ([0-9]+)</b>',$html,$cy)) echo 'CY = ',$cy[1];
  elseif (ereg(str_replace('.','\.',$host).'(.*)</div></td><td align="right">([0-9]+)</td>',$html,$cy)) echo 'CY = ',$cy[2];
  else echo 'Parse error';
else echo 'Fetch error';
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху