За последние 24 часа нас посетили 17633 программиста и 1655 роботов. Сейчас ищут 937 программистов ...

Проблемы с парсингом

Тема в разделе "PHP для новичков", создана пользователем kentastik77, 16 авг 2012.

  1. kentastik77

    kentastik77 Активный пользователь

    С нами с:
    21 мар 2010
    Сообщения:
    89
    Симпатии:
    0
    Задача такая. Залогинится на сайт, перейти на нужную вкладку, выбрать нужную табличку и взять из нее данные.
    Залогинился.
    Перешел.
    Выбрал, отрезал остальное ненужное и вывел ее на экран
    Теперь внимание вопрос, структура таблички довольна удачная на первый взгляд у каждой ячейки разный стиль, но почему то не получается выбрать значения таким способом
    Код (Text):
    1. $ids = strpos($id, '<td style="padding:4px 0 0 0;text-align:center;width:105px">');
    2. $id = substr($id, $ids);
    3. $ids = strpos($id, '</td>');
    4. $id = substr($id, 0, $ids);
    5. echo $id;
    В чем может быть проблема? Других ячеек с таким же стилем пустых нет. Это первая. Если задавать другие параметры (например первые 2 цифры числа из этой ячейки), то проблем нет.
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    отлаживай, фигли. втыкай die(var_export($var, true)); после каждой строки и смотри
     
  3. kentastik77

    kentastik77 Активный пользователь

    С нами с:
    21 мар 2010
    Сообщения:
    89
    Симпатии:
    0
    ставил вардампы, понять проблему не помогло.
    Если делать обрезку по строкам типа по <tr></tr> тогда строку выводит из таблички, но я не знаю сколько точно символов может быть в значении :(
    А если делать как в первом посте, то получается код отрезает всё до первого тега <td style="padding:4px 0 0 0;text-align:center;width:105px">, включая его и выводит остатки страницы на экран.

    Добавлено спустя 15 минут 58 секунд:
    и еще, если попробовать вычленить вторую колонку в первой строчке, то отрезается всё равно всё до тега из предыдущего поста. Может стили не успевают подгружаться?

    Добавлено спустя 5 минут 17 секунд:
    и еще, сразу не обратил внимания, но если я обрезаю всё по <tr></tr>, то почему не видна остальная структура таблицы?

    Добавлено спустя 6 минут 35 секунд:
    разобрался. проблема была где ее и искал, но долго не замечал. Если кому будет полезно поясню. В хроме есть отладка вот через нее я и смотрел хтмл код, там он мне выдавал в коде страницы кавычки в значениях стиля, а когда я только что открыл именно код страницы, то увидел, что на самом деле там апострофы. Всё работает. Эт капец :)
     
  4. kentastik77

    kentastik77 Активный пользователь

    С нами с:
    21 мар 2010
    Сообщения:
    89
    Симпатии:
    0
    Друзья, помогите, у меня творческий затык.
    Короче написал парсерочек, отлично все данные находит, в базу добавляет - красота. Но возникла небольшая сложность не знаю как сделать рациональнее перебор страничек. Структура такая:
    1.php - авторизация на сайте
    2.php - получение нужной страницы
    3.php - обработка данных и запись в БД
    Так вот, когда я во втором файле получаю страницу первую и обрабатываю ее третьим файлом всё круто, но как изменить затем номер страницы во втором файле? Передавать ГЕТом? Дублировать код? Подскажите как это будет лучше сделать?
     
  5. Крыс

    Крыс Активный пользователь

    С нами с:
    3 фев 2012
    Сообщения:
    449
    Симпатии:
    0
    ничё не понимаю :)
     
  6. kentastik77

    kentastik77 Активный пользователь

    С нами с:
    21 мар 2010
    Сообщения:
    89
    Симпатии:
    0
    печально :(

    Добавлено спустя 21 минуту 3 секунды:
    Первый файл кода, который забирает страницу
    Код (Text):
    1. <?php
    2.  
    3. $cookie_file = 'cookie.txt';
    4.  
    5. $counter = 1;
    6.  
    7. $instaURL = 'https://cabinet.instaforex.com/partner/account_history';
    8. $NEWinstaURL = 'https://cabinet.instaforex.com/partner/account_history/get_history/'.$counter;
    9.  
    10. $db = mysql_connect ("localhost","kentastik_kalk","123456");
    11. mysql_select_db("kentastik_kalk", $db);
    12.  
    13. $myrow = "SELECT id FROM rebate ORDER BY id DESC";
    14. $myID = mysql_query($myrow);
    15. $row = mysql_fetch_array($myID);
    16. echo $row['id'];
    17.  
    18. // ------------- начало цикла изменения урла ----------------
    19.  
    20.  
    21. $ch = curl_init($NEWinstaURL);
    22.  
    23. curl_setopt($ch, CURLOPT_URL, $NEWinstaURL);
    24. curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0.1');
    25. curl_setopt($ch, CURLOPT_REFERER, $instaURL);
    26. curl_setopt($ch, CURLOPT_ENCODING, 'gzip, deflate');
    27. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    28. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    29.  
    30. $header = array();
    31. $header[] = 'Accept: */*';
    32. $header[] = 'Accept-Charset: ';
    33. $header[] = 'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3';
    34. $header[] = 'Pragma: ';
    35. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    36. curl_setopt($ch, CURLOPT_POST, true);
    37.  
    38. $today = date('m/d/Y');
    39. $TODAY = 'end='.$today;
    40.  
    41. $fields = array();
    42. $fields[] = 'acc=000000'; //не забыть про другие аккаунты на евро и рублях
    43. $fields[] = "'".$TODAY."'";
    44. $fields[] = 'notComission=false';
    45. $fields[] = 'notCompression=false';
    46. $fields[] = 'start=07/10/2010';
    47.  
    48. curl_setopt($ch, CURLOPT_POSTFIELDS, implode('&', $fields));
    49. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    50. curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    51. curl_exec($ch);
    52. curl_close($ch);
    53.  
    54.     mysql_close($db);
    55.     // --- выход из БД ---
    56.  
    57.  
    58. // ---------- конец цикла изменения урла ----------------
    59.  
    60. ?>
    Второй файл, который обрабатывает страницу
    Код (Text):
    1. <?php
    2.  
    3.     $homepage = file_get_contents('http://robokapper.bet-school.com/page.php');
    4.  
    5.     $pos = strpos($homepage, '<table style="width:100%;" cellpadding="0" cellspacing="0" border="0">');
    6.     $homepage = substr($homepage, $pos);
    7.     $pos = strpos($homepage, '</table>');
    8.     $homepage = substr($homepage, 0, $pos);
    9.     $STROKI = explode("<tr>", $homepage);
    10.  
    11.     // --- подключение к БД ----
    12.     $db = mysql_connect ("localhost","kentastik_kalk","123456");
    13.     mysql_select_db("kentastik_kalk", $db);
    14.  
    15.     // ------ цикл перебора строк ------
    16.     $i = 1;
    17.     while($i < 52 ) {
    18.         // ------ проверка условий ------
    19.         include ('znacheniya.php');
    20.         if($REBATE[0] === "Rebate") {
    21.             // ------ добавление в БД ------
    22.             $chislo = date('Y-m-d', strtotime($TIME[0]));
    23.            
    24.             $vstavka = "INSERT INTO rebate (id,date,agent,schet,komissiya,valuta) VALUES ('$ID[1]','$chislo','$REBATE[0]','$REBATE[2]','$DENGI[0]','$DENGI[1]')";
    25.             $result = mysql_query($vstavka);
    26.            
    27.             echo $TODAY."  Успешно добавлена запись в БД!<br>";
    28.             // ------ КОНЕЦ добавление в БД ------
    29.         }
    30.         // ------ КОНЕЦ проверка условий ------
    31.     //echo $STROKI[$i];
    32.     $i = $i + 2;
    33.     }
    34.     // ------ КОНЕЦ цикл перебора строк ------
    35.     mysql_close($db);
    36.     // --- выход из БД ---
    37.  
    38. ?>
    Вопрос каким макаром менять страницу в первом файле? Так надеюсь понятно стало