Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471

Неполадки с парсером

16.01.2013, 13:01. Показов 2390. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Есть парсер auto.ru, он копирует нужные данные о конкретном автомобиле, по указанной в поле ввода ссылке.
Все работало отлично, до начала недели.
Теперь у них появилась капча, которая проверяет запрос от бота или реального человека.
Соответственно копировать страницу нужную не получается.
Сам запрос для получения документа осуществляю таким образом:

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
function query($url){  // функция подключекния к указанному урлу и получение файла
 
     $curl = curl_init();
 
     curl_setopt($curl,CURLOPT_URL, $url);
 
     curl_setopt($curl,CURLOPT_USERAGENT,'Opera/9.80 (Windows NT 5.1; U; MRA 5.5 (build 02842); ru) Presto/2.5.22 Version/10.51');
 
     curl_setopt ($curl,CURLOPT_FOLLOWLOCATION,1);
 
     curl_setopt($curl,CURLOPT_TIMEOUT,60);
 
     curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
 
     $result = curl_exec($curl);
 
     curl_close($curl);
 
     return $result;
 
     }
 
 
 
$content_all=query(''.$url.'');  // скачиваем файл
Может подскажете как обойти защиту?
Возможно как-то реально иммитировать что зашел человек через браузер, а не скрипт обращается?
Или какие-то другие способы!
За ранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2013, 13:01
Ответы с готовыми решениями:

Неполадки с парсером
хм, ну если ты делаешь как в примере - выставляешь mas, а используешь mas, то и не получится :)

Калькулятор с парсером
Нужно написать калькулятор с парсером. Его задача - работа над введёнными, в поле ввода текста, выражения. Например: ...

Проблема с парсером
Надо написать парсер на php, с яндексом работает нормально, но youtube.com, например не парсит. код: include 'curl_query.php'; ...

7
14 / 14 / 8
Регистрация: 31.05.2012
Сообщений: 210
Записей в блоге: 2
16.01.2013, 19:17
может этот вариант:

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
function get_page_as_browser($url, $with_timeout = 30, $with_cookies = false, $with_redirects = true)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
 
    if ($with_cookies)
    {
        curl_setopt($ch, CURLOPT_COOKIEFILE,  'cookiefile');
        curl_setopt($ch, CURLOPT_COOKIEJAR,  'cookiefile');
    }
 
    if ($with_redirects) curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
 
    curl_setopt($ch, CURLOPT_TIMEOUT, $with_timeout);
    curl_setopt($ch, CURLOPT_USERAGENT, get_random_user_agent());
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
 
    $ret = trim(curl_exec($ch));
    curl_close($ch);    
 
    return $ret;
}
function get_random_user_agent()
{
     $uas = array(
       'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)',
       'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.0.3705)',
       'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon)',
       'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; bgft)',
       'Mozilla/4.5b1 [en] (X11; I; Linux 2.0.35 i586)',
       'Mozilla/5.0 (compatible; Konqueror/2.2.2; Linux 2.4.14-xfs; X11; i686)',
       'Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1',
       'Mozilla/5.0 (Windows; U; Win98; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1',
       'Mozilla/5.0 (X11; U; Linux 2.4.2-2 i586; en-US; m18) Gecko/20010131 Netscape6/6.01',
       'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010801',
       'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7',
       'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040413 Epiphany/1.2.1',
       'Opera/9.0 (Windows NT 5.1; U; en)',
       'Opera/8.51 (Windows NT 5.1; U; en)',
       'Opera/7.21 (Windows NT 5.1; U)',
       'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)',
       'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',
       'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.0.6) Gecko/20060928 Firefox/1.5.0.6',
       'Opera/9.02 (Windows NT 5.1; U; en)',
       'Opera/8.54 (Windows NT 5.1; U; en)'
     );
 
     return $uas[rand(0, count($uas)-1)];
}
0
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
16.01.2013, 20:53  [ТС]
myxasa, спасибо, вариант испробовал, но к сожалению эффект тот же.
Мне один человек писал "У них защита по кукам и яваскрипту, они палят такие примитивные грабберы."

Добавлено через 26 минут
И кстати, не работает переадресация почему- то. Хотя строка
PHP
1
if ($with_redirects) curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
должна её поддерживать. А у меня при запросе ошибка 302 Found - это как-раз переадресация с запрашиваемой страницы, на капчу

Добавлено через 1 минуту
На всякий случай напишу как делаю вывод:
PHP
1
$content_all=get_page_as_browser(''.$url.'');  // скачиваем файл
Ну и затем соответственно :
PHP
1
echo $content_all;
0
14 / 14 / 8
Регистрация: 31.05.2012
Сообщений: 210
Записей в блоге: 2
16.01.2013, 21:24
можно код парсера сюда...
0
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
16.01.2013, 21:29  [ТС]
Цитата Сообщение от myxasa Посмотреть сообщение
можно код парсера сюда...
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
if(empty($act)){  // Начальная страница парсинга, указываем урл машины
echo "<br />Введите ссылку на машину на сайте auto.ru<br />";?>
 
<style>
input[type=text] {
 border: 1px solid #777;
 width: 196px;
 height: 18px;
}
</style>
<?
echo"<FORM METHOD=POST ACTION=\"cars.php\">";
echo"<input type=\"hidden\" name=\"act\" value=\"1\"/>";
echo"<input name=\"url\" type=\"text\">";
echo"<input type=\"submit\" value=\"Копировать машину\" style=\"background-color:#ffe4b2;\"></form>";
 
 
}else{ // Обрабатываем полученный урл
 
              function get_page_as_browser($url, $with_timeout = 30, $with_cookies = false, $with_redirects = true)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_HEADER, 0);
 
    if ($with_cookies)
    {
        curl_setopt($ch, CURLOPT_COOKIEFILE,  'cookiefile');
        curl_setopt($ch, CURLOPT_COOKIEJAR,  'cookiefile');
    }
 
    if ($with_redirects) curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
 
    curl_setopt($ch, CURLOPT_TIMEOUT, $with_timeout);
    curl_setopt($ch, CURLOPT_USERAGENT, get_random_user_agent());
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
 
    $ret = trim(curl_exec($ch));
    curl_close($ch);
 
    return $ret;
}
function get_random_user_agent()
{
     $uas = array(
       'Mozilla/4.0 (compatible; MSIE 6.0; Windows 98)',
       'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0; .NET CLR 1.0.3705)',
       'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Maxthon)',
       'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; bgft)',
       'Mozilla/4.5b1 [en] (X11; I; Linux 2.0.35 i586)',
       'Mozilla/5.0 (compatible; Konqueror/2.2.2; Linux 2.4.14-xfs; X11; i686)',
       'Mozilla/5.0 (Macintosh; U; PPC; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1',
       'Mozilla/5.0 (Windows; U; Win98; en-US; rv:0.9.2) Gecko/20010726 Netscape6/6.1',
       'Mozilla/5.0 (X11; U; Linux 2.4.2-2 i586; en-US; m18) Gecko/20010131 Netscape6/6.01',
       'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.3) Gecko/20010801',
       'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7',
       'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.6) Gecko/20040413 Epiphany/1.2.1',
       'Opera/9.0 (Windows NT 5.1; U; en)',
       'Opera/8.51 (Windows NT 5.1; U; en)',
       'Opera/7.21 (Windows NT 5.1; U)',
       'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)',
       'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)',
       'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.0.6) Gecko/20060928 Firefox/1.5.0.6',
       'Opera/9.02 (Windows NT 5.1; U; en)',
       'Opera/8.54 (Windows NT 5.1; U; en)'
     );
 
     return $uas[rand(0, count($uas)-1)];
}
 
 
 
$content_all=get_page_as_browser(''.$url.'');  // скачиваем файл
 
$content_all = iconv('UTF-8', 'windows-1251', $content_all); // Меняем кодировку файла
 
 if(empty($content_all)){  /// Проверяем наличие файла, если нет, выдаем ошибку
    echo "Ошибка закачки файла с сервера.";
 }else{  // файл получен - обрабатываем его
 
 echo $content_all;
 
}
А дальше пошел сам парсер все не буду копировать, нет смысла, вот кусок:

PHP
1
2
3
4
5
6
7
8
9
10
11
///////Получаем цену на авто
 preg_match( '/<p class="cost"><big><strong>(.*?) руб.<\/strong><\/big> <span>(.*?)<\/span><ins class="sale-pic bg-cost"><\/ins><\/p>/is' , $content_all , $cena_car );
$cena_car = str_replace("<i> </i>"," ",$cena_car[1]);
 
 
/////Получаем год выпуска
preg_match( '/<dt>Год вып:<\/dt>(.*?)<dd class="(.*?)"><big><strong>(.*?)<\/strong><\/big><\/dd>/is' , $content_all , $god );
$god=$god[3];
/////Получаем тип КПП
preg_match( '/<dt>КПП:<\/dt>(.*?)<dd class="(.*?)"><big><strong>(.*?)<\/strong><\/big><\/dd>/is' , $content_all , $kpp );
$kpp=$kpp[3];
0
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
18.01.2013, 16:54  [ТС]
Тема еще актуальна. Ни у кого нет никаких идей?

Добавлено через 44 минуты
Потестировать парсер можно по адресу http://mirdj.ru/cars.php Там вводим ссылку на автомобиль на авто.ру например http://cars.auto.ru/cars/used/... 1f30f.html . В брауезере она открывается без проблем, а через парсер выводит сейчас 302 Found
nginx/1.2.3, хотя пару дней назад открывало всплывающее окно с капчей.
0
 Аватар для alpex
603 / 578 / 103
Регистрация: 16.07.2012
Сообщений: 1,762
21.01.2013, 02:51
попробуйте referer им послать
0
3 / 3 / 2
Регистрация: 16.01.2013
Сообщений: 471
21.01.2013, 11:31  [ТС]
alpex, я добавил в код и реферер и куки:
Добавил в функцию строки

PHP
1
2
3
4
5
6
7
8
$cat_site = "/home/user/data/www"; // Путь к каталогу где файл лежит
$user_cookie_file = ''.$cat_site.'/cookies.txt'; // файл кукисов
//куки
 curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file);
 //куки
 curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file);
 
 curl_setopt($ch, CURLOPT_REFERER, "http://yandex.ru");
Пока эффект такой же.
Только вопрос есть - В этот файл должна производиться запись куков?
Права я выставил на файл, но он пустой.

Добавлено через 1 час 37 минут
Тут сделал запрос:
PHP
1
curl -A 'Opera/9.0 (Windows NT 5.1; U; en)' -v -c cookies.txt -b cookies.txt http://cars.auto.ru/cars/used/sale/36306614-1f30f.html
В результате получили:
Java
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
<html>
    <head>
        <title></title>
        <meta http-equiv="Expires" content="28FEB2002" />
        <meta http-equiv="CACHE-CONTROL" content="NO-CACHE" />
        <sсriрt type="text/jаvаsсript">
        function addFields(formObj) {  }
        function redirect(commitType) {
           var cookieenabled = false;
           if (navigator.cookieEnabled) {
              if (navigator.cookieEnabled==true) {
                 var exdate=new Date();
                 exdate.setDate(exdate.getDate()+1);
                 document.cookie="PRID=" +escape(genPid())+";
                 path=/; expires="+exdate.toGMTString()+";
                 domain=.auto.ru";
                 cookieenabled=(document.cookie.indexOf("PRID")!=-1)? true : false;
              }
           }
           if (cookieenabled) {
              if (commitType=="reload")
                 window.location.reload(true);
              else {
                var oFrm = document.createElement("form");
                var oEnvlp = document.getElementById("frmPlsHldr");
                oFrm.method = "post";
                addFields(oFrm);
                oEnvlp.appendChild (oFrm);
                oFrm.submit();
           }
       } else {
           var oJSCookieMSGObj = document.getElementById('JSCookieMSG');
           oJSCookieMSGObj.style.display = 'block';
       }
    } 
        </sсriрt>
    </head>
    <body style="background-color:white">
        <div style='display:none' id='sbbhscc'></div><sсriрt type="text/jаvаsсript">sbbvscc='%3c%74%61%62%6c
[вырезано для краткости]
%28%29+%73%62%62%5f%64%7a%73%6e%51%76%6f%28%29; }';</sсriрt><div id='sbbfrcc' style='position: absolute; top: -10px; left: -3px; font-size:1px'></div>
        <div id='JSCookieMSG' style="display:none"><h3 class="b-win-title">Информация для пользователя</h3>
<p class="b-win-p">Пожалуйста, для просмотра этого сайта, включите в браузере поддержку Сookies</p>
<strong class="b-win-inc">Incident Id:</strong> 50fcdd2a0194e
</div>
        <div id='JSOffMSG'><nosсriрt><h3 class="b-win-title">Информация для пользователя</h3>
<p class="b-win-p">Пожалуйста, для просмотра этого сайта, включите в браузере поддержку JavaScript</p>
<strong class="b-win-inc">Incident Id:</strong> 50fcdd2a0194e
</nosсriрt></div>
        <div id='frmPlsHldr'></div>
        <sсriрt type="text/jаvаsсript">
            oJSOffMSG = document.getElementById('JSOffMSG');
            oJSOffMSG.style.display = 'none';
            try{
              y=unescape(sbbvscc.replace(/^<\!\-\-\s*|\s*\-\->$/g,''));
             document.getElementById('sbbhscc').innerHTML=y;
             x=unescape(sbbgscc.replace(/^<\!\-\-\s*|\s*\-\->$/g,''));
           } catch(e){ x='function genPid() {return "jser"; }'; }
           document.write ('<'+'sсriрt type="text/javascri'+'pt">'+x+' redirect("reload");</'+'sсriрt>'); 
         </sсriрt>
    </body>
</html>
Судя по коду он проверяет куки и яву скрипт. Значит надо сделать иммитацию включенного ява скрипта.
Это реально? Понятно что не курлом, но может на js?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.01.2013, 11:31
Помогаю со студенческими работами здесь

Помощь с парсером
Мне нужно добавить на сайт туеву тучу товаров.Вручную,конечно же влом,поэтому решил написать что-то вроде парсера.Допустим есть сайт и с...

Проблема с парсером
Здравствуйте, помогите пожалуйста с парсером. Нужно с сайта http://spys.one/free-proxy-list/RU/ спарсить proxy сервера получается...

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

Помощь с парсером
Криво написал небольшой парсер.Нужно выдергивать с сайта описание товара.Работает, в принципе, как надо,но есть проблемы с кодировкой....

Проблема с парсером
В общем проблема в следующем. Есть сайт со списком тв программ. Парсить оттуда список не представляет сложности но список не совсем...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru