[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Нужно разделить список по строкам
RoMaN444Ik
Задача: есть список(отправленный через post запрос), в нем на каждой строчке стоит адрес сайта, нужно ах разделить, как-то чтобы потом делать запросы яндексу типа:
http://yandex.ru/yandsearch?text=site1.ru&lr=197
http://yandex.ru/yandsearch?text=site2.ru&lr=197
http://yandex.ru/yandsearch?text=site3.ru&lr=197
....
(не спам или накрутка - клиенту нужно)
Причем нужно делать много этих запросов - пока сайты не кончатся... Вот как такое реализовать? Если можно - рабочие примеры пожалуйста!
Буду очень благодарен за помощь! smile.gif



Спустя 6 минут, 11 секунд (25.07.2011 - 19:06) Winston написал(а):
Так, что ли ?
$str = 'http://yandex.ru/yandsearch?text=site1.ru&lr=197
http://yandex.ru/yandsearch?text=site2.ru&lr=200'
;

echo '<pre>';
print_r(preg_split('#[/\?&=]#i', $str));
echo '</pre>';

Цитата (RoMaN444Ik @ 25.07.2011 - 19:00)
есть список

Покажи список

Спустя 6 минут, 39 секунд (25.07.2011 - 19:13) Winston написал(а):
Или так надо ?
$str = 'http://yandex.ru/yandsearch?text=site1.ru&lr=197
http://yandex.ru/yandsearch?text=site2.ru&lr=197
http://yandex.ru/yandsearch?text=site3.ru&lr=197'
;

preg_match_all('#text=(.*)&#i', $str, $matches);

echo '<pre>';
print_r($matches[1]);
echo '</pre>';

Спустя 1 минута, 39 секунд (25.07.2011 - 19:15) Invis1ble написал(а):
1.
Цитата
есть список

пример списка в студию!
2. Что нужно получить - конкретный пример

Спустя 5 часов, 48 минут, 10 секунд (26.07.2011 - 01:03) walerus написал(а):
Я так думаю что ТС имел ввиду, что сайты вводятся в окошко, и потом обрабатываются, т.е. ему нужно explode


$get_data = explode("\r\n", $input_text); // Разобьет текст в массив...

// а потом прогнать циклом

foreach($get_data as $data)
{
$result = file_get_content('http://yandex.ru/yandsearch?text=' .$data. '&lr=197');
print_r($result);
}


что то типа этого...

Спустя 4 часа, 33 минуты, 38 секунд (26.07.2011 - 05:36) RoMaN444Ik написал(а):
walerus, прав. Пользователем вводится список сайтов в textarea, по одному сайту на строку + там еще будет чекбокс и в зависимости что будет выбрано в этом чекбоксе будет проверка по поисковым системам (google и яндекс).
Потом, когда все будет отправлено, мне нужно будет отправлять определенным(выбранным) поисковым система отправить запросы типа:
Цитата
http://yandex.ru/yandsearch?text=site.ru&lr=197
http://yandex.ru/yandsearch?text=site1.ru&lr=197
http://yandex.ru/yandsearch?text=site2.ru&lr=197
http://yandex.ru/yandsearch?text=site3.ru&lr=197
http://www.google.ru/search?rlz=1C1GPCK_en...ome&ie=UTF-8&q=site.ru
http://www.google.ru/search?rlz=1C1GPCK_en...ome&ie=UTF-8&q=site1.ru
http://www.google.ru/search?rlz=1C1GPCK_en...ome&ie=UTF-8&q=site2.ru
http://www.google.ru/search?rlz=1C1GPCK_en...ome&ie=UTF-8&q=site3.ru

Притом нужно все это провернуть через прокси(для каждого запроса разный) и желательно, после каждого запроса делать паузу в 30 сек - яндекс палит такие дела....
Затем получить кол-во результатов по этим запросам... и воткнуть их в таблицу типа:
сайт | результат по google | результат по яндексу
В общем даже не знаю что делать...

Спустя 7 минут, 2 секунды (26.07.2011 - 05:43) RoMaN444Ik написал(а):
Пример списка сайтов:
--------------------------------------------------------------------------
site.ru
site1.ru
site2.ru
site3.ru
....
siteN.ru
--------------------------------------------------------------------------

Спустя 23 минуты, 23 секунды (26.07.2011 - 06:07) RoMaN444Ik написал(а):
Есть у меня функция работающая с прокси:
function get($url,$proxy) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208');
curl_setopt($ch, CURLOPT_PROXY, "$proxy");
$ss=curl_exec($ch);
curl_close($ch);
return $ss;
}

Так, вот если ее вызов засунуть в цикл, вот так:
foreach($get_data as $data)
{
$result = get('http://yandex.ru/yandsearch?text=' .$data. '&lr=197','80.91.181.107:80');
print_r($result);
}

То почему-то выводит пустой экран... а логах пусто :( и что в итоге делать я вообще не знаю :(

Спустя 5 часов, 8 минут, 46 секунд (26.07.2011 - 11:16) Invis1ble написал(а):
RoMaN444Ik
Цитата
То почему-то выводит пустой экран... а логах пусто :( и что в итоге делать я вообще не знаю :(

определить уровень отображения ошибок для начала
error_reporting(E_ALL);

Спустя 20 минут, 1 секунда (26.07.2011 - 11:36) Winston написал(а):
Цитата (RoMaN444Ik @ 26.07.2011 - 05:36)
Притом нужно все это провернуть через прокси(для каждого запроса разный) и желательно, после каждого запроса делать паузу в 30 сек - яндекс палит такие дела....
Затем получить кол-во результатов по этим запросам... и воткнуть их в таблицу типа:
сайт | результат по google | результат по яндексу

Ты хочешь, чтобы за тебя сделали? За бесплатно вряд ли кто-то согласится.

Спустя 2 часа, 47 секунд (26.07.2011 - 13:36) RoMaN444Ik написал(а):
PHPprogrammer
Я хочу чтобы мне помогли, подкинули примеры, указали на нужные функции и т.д.

Спустя 10 минут, 43 секунды (26.07.2011 - 13:47) Invis1ble написал(а):
RoMaN444Ik
я же написал тебе, установи для начала уровень отображения ошибок
и покажи код полностью

Спустя 25 минут, 42 секунды (26.07.2011 - 14:13) inpost написал(а):
RoMaN444Ik
Я ранее отвечал, как выбрать конкретно каждый сайт, в таком случае у тебя будет массив сайтов, если же разделять по строчке, то воспользуйся explode("\n",$text); - то есть по переносу.

Спустя 8 минут, 26 секунд (26.07.2011 - 14:21) RoMaN444Ik написал(а):
Цитата (Invis1ble @ 26.07.2011 - 10:47)
RoMaN444Ik
я же написал тебе, установи для начала уровень отображения ошибок
и покажи код полностью

Там все чисто, т.к. при вводе вместо яндекса, напр. сайта 2ip.ru - все открывается. Да и в логах пусто, потому что нет ошибок... даже не знаю... наверно яндекс меня забанил, хотя я через прокси разные заходил...

Спустя 57 секунд (26.07.2011 - 14:22) RoMaN444Ik написал(а):
Весь код:
<?php
if (isset($_POST['sites'], $_POST['date1'], $_POST['date2'], $_POST['ps'])) {
// Вводим переменные
$sites = $_POST['sites'];
$date1 = $_POST['date1'];
$date2 = $_POST['date2'];
$ps = $_POST['ps'];
// Разбиваем массив на части
$get_data = explode("\r\n", $sites);
// Функция для прокси
function get($url,$proxy) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0');
curl_setopt($ch, CURLOPT_PROXY, "$proxy");
$ss=curl_exec($ch);
curl_close($ch);
return $ss;
}
// Прогоняем
foreach($get_data as $data)
{
$prox = "80.240.203.100:8080";
$url = $data;
$result_s = get($url,$prox);
echo($result_s);
}
}
else {
exit("Вернитесь и заполните все поля формы!");
}
?>

Спустя 6 минут, 54 секунды (26.07.2011 - 14:29) Invis1ble написал(а):
<?php
error_reporting(E_ALL);
if (isset($_POST['sites'], $_POST['date1'], $_POST['date2'], $_POST['ps'])) {
// Вводим переменные
$sites = $_POST['sites'];
$date1 = $_POST['date1'];
$date2 = $_POST['date2'];
$ps = $_POST['ps'];
// Разбиваем массив на части
$get_data = explode("\r\n", $sites);
echo '<pre>'; print_r($get_data); echo '</pre>';
// Функция для прокси
function get($url,$proxy) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0');
curl_setopt($ch, CURLOPT_PROXY, "$proxy");
$ss=curl_exec($ch);
curl_close($ch);
return $ss;
}
// Прогоняем
foreach($get_data as $data)
{
$prox = "80.240.203.100:8080";
$url = $data;
$result_s = get($url,$prox);
echo($result_s);
}
}
else {
exit("Вернитесь и заполните все поля формы!");
}
?>

что выводит?

Спустя 6 минут, 53 секунды (26.07.2011 - 14:36) RoMaN444Ik написал(а):
Выводит:
Array
(
[0] => http://yandex.ru/yandsearch?text=css&lr=197
)
HTTP/1.1 302 Found Location: http://yandex.ru/showcaptcha?retpath=http%3A//yandex.ru/yandsearch%3Fte xt%3Dcss%26lr%3D197&t=0/1311680158/e50173c9e6abd1ebec3dbb1960917bc4&cc=1 Set-Cookie: spravka=dD0xMjgwMTQ0MTU4O2k9ODAuMjQwLjIwMy4xMDA7dT0xMjgwMTQ0MTU4NzY0NzUwNzM5O2g9Zjg1NWMzNjE2YmVjMTJjZGI2YzBhMDNiYjFmZWViNmI=; domain=.yandex.ru; path=/; expires=Thu, 25-Aug-2011 11:35:58 GMT Connection: Close

Спустя 40 секунд (26.07.2011 - 14:37) RoMaN444Ik написал(а):
Короче он меня на капчу кидает да?

Спустя 3 минуты, 6 секунд (26.07.2011 - 14:40) Invis1ble написал(а):
судя по url - да

Спустя 2 минуты, 10 секунд (26.07.2011 - 14:42) RoMaN444Ik написал(а):
А как быть-то? Я вот только-что сменил несколько прокси и при одном запросе он мне выдал просто:
Array
(
[0] => http://yandex.ru/yandsearch?text=рецепты суши
)

В итоге он должен был вывести страницу а этого не произошло - пустая и все тут!
Хотя если спрашивать другие страницы, напр. 2ip.ru - то пускает! В чем дело?

Спустя 3 минуты, 56 секунд (26.07.2011 - 14:46) Invis1ble написал(а):
надо наверное во-первых ставить задержку, менять на каждой итерации user-agent,
еще попробуй добавить curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

вобщем, смотри заголовки ответа и анализируй их - это основной совет

Спустя 1 минута, 13 секунд (26.07.2011 - 14:47) RoMaN444Ik написал(а):
Ну насчет user-agent я уже тоже подумал - а вот можно-ли в curl прописать referer? это тоже добавит запутанности...

Спустя 3 минуты, 18 секунд (26.07.2011 - 14:50) Invis1ble написал(а):
CURLOPT_REFERER

Спустя 3 минуты, 23 секунды (26.07.2011 - 14:54) RoMaN444Ik написал(а):
Ооо... хорошо... уже лучше! А что еще можно рандомизировать и кстати как лучше рандомизировать, какая там функция используется?

Спустя 2 минуты, 38 секунд (26.07.2011 - 14:56) Invis1ble написал(а):
Цитата
что еще можно рандомизировать

не знаю, зависит от твоей фантазии
Цитата
какая там функция используется?

какую напишешь. Штатные - rand(), mt_rand()

Спустя 7 минут, 13 секунд (26.07.2011 - 15:04) RoMaN444Ik написал(а):
Спасибо, а как можно сделать что-то типа случайного выбора фразы(user agent`a)?

Спустя 1 минута, 59 секунд (26.07.2011 - 15:06) Invis1ble написал(а):
создаешь массив user-agent'ов и вытаскиваешь случайный элемент
$agent = $agents[mt_rand($agents)];

Спустя 1 минута, 33 секунды (26.07.2011 - 15:07) RoMaN444Ik написал(а):
Спасибо, ща протестирую!

Спустя 59 секунд (26.07.2011 - 15:08) Invis1ble написал(а):
RoMaN444Ik
не то написал
$agent = $agents[array_rand($agents)];

Спустя 56 минут, 11 секунд (26.07.2011 - 16:04) walerus написал(а):
Ребят ), да там все гораздо проще )), тоже и*ался с ним, для той же темы, парсить выдачу, для всяких нужд), так вот, капчу будет выдавать всегда, НО, если посмотреть перехватчиком ( очень рекомендую всегда им пользоваться, чтоб понять что и как передается ), то можно заметить что он сначала, создает куку, загружая "левую" картинку, т.е. обращается к определенному адресу. И если все ок, ставит тебе куку, дальше - хоть запарси его в хлам. Вот такие "трудности" laugh.gif

Спустя 7 минут, 43 секунды (26.07.2011 - 16:12) RoMaN444Ik написал(а):
Спасибо. Все работает.

Спустя 23 секунды (26.07.2011 - 16:12) Invis1ble написал(а):
walerus
Так я и говорю, что нужно уметь анализировать заголовки, чтоб сэмулировать юзера, а не бота

Спустя 2 минуты, 9 секунд (26.07.2011 - 16:14) RoMaN444Ik написал(а):
walerus
Да, я уже заметил что он мне куку какуюто ставит очень упорно... вот тока дело в том что, как-то раз он мне через мой скрипт выдавал свою страницу, причем не одну... значит все-таки есть язвимость...



Спустя 50 секунд RoMaN444Ik написал(а):
А можно ли разрешить принимать куки скрипту? Если это сделать то все должно работать...



Спустя 5 минут, 40 секунд RoMaN444Ik написал(а):
О, прикол! Через file_get_contents - берет страницу... без вопросов!

Спустя 10 минут, 23 секунды (26.07.2011 - 16:25) walerus написал(а):
Цитата (RoMaN444Ik @ 26.07.2011 - 13:20)
О, прикол! Через file_get_contents - берет страницу... без вопросов!

Да уж, забавно конечно, но через 50 - 100 запросов будет бан по IP (а может и не будет ), тогда file_get_content(), не поможет, т.к. не подключишь проксЯ )))

Спустя 1 минута, 55 секунд (26.07.2011 - 16:27) RoMaN444Ik написал(а):
ага, вот у меня беда блин... может все-таки можно как-то эмулировать браузер через php?

Спустя 3 минуты, 40 секунд (26.07.2011 - 16:30) Invis1ble написал(а):
CURLOPT_COOKIE
CURLOPT_COOKIEFILE
CURLOPT_COOKIEJAR

советую почитать про cURL, чтоб не возникало таких вопросов

Спустя 1 час, 4 минуты, 29 секунд (26.07.2011 - 17:35) walerus написал(а):
Invis1ble
+1 cool.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.