Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
And_Smi
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
#1

Парсинг страницы для поиска самой ранней успешной сдачи задания

18.08.2014, 13:45. Просмотров 751. Ответов 15
Метки нет (Все метки)

Здравствуйте, помогите пожалуйста. Надо пропарсить страницу, а именно вот эту http://acm.timus.ru/status.aspx?space=1&num=1014&author=133892, чтобы выводила самую ранюю успешную сдачу этой задачи. Выводит только ДАТУ, остальное, имя студента, на каком языке и т.д. это не нужно. Только самую первую успешную попытку и только выводить её дату. И, если не сложно, объясните, как можно сравнить две даты. Скажем та ссылка, которая была до этого и http://acm.timus.ru/status.aspx?space=1&num=1014&author=133885. Нужно сравнить, кто раньше решил 1014 задачу.

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

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.08.2014, 13:45
Ответы с готовыми решениями:

Вывести имя файла с самой последней или самой ранней датой последнего использования
Здравствуйте. Помогите с написанием bat файла. Разработать командный файл,...

Запрос для определения самой ранней даты рождения
Создать запрос на поиск самой ранней даты рождения сотрудников офиса в...

Определить разницу в месяцах и днях между самой ранней и самой поздней датами, относящимися к заданному году
Решить задачу с использованием структуры «бинарный файл» (в файле хранятся...

Выделение самой ранней и самой поздней даты
Нужно выделить из таблицы самую ранюю и самую позднюю дату. В таблицу надо...

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

15
Allexxisss
60 / 60 / 9
Регистрация: 04.02.2012
Сообщений: 214
18.08.2014, 14:17 #2
с помощью json-запроса (get) получаешь html-код странички. Выделяешь искомый текст и сравниваешь. А чтобы даты сравнить можно перевести дату в числовой формат если память не изменяет функцией mktime

Добавлено через 34 секунды
А вобще в инете достаточно статей по парсингу сайтов, поищи... не ленись
0
And_Smi
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
18.08.2014, 14:55  [ТС] #3
Allexxisss, вот что у меня получилось
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$data = file_get_html('http://acm.timus.ru/author.aspx?id=133892');
set_time_limit(0);
 
if($data->innertext!='' and count($data->find('td'))){
 
    foreach($data->find('.accepted') as $a){
 
        if (isset($plg->plaintext)) $plgObj = 'plgContent' . ucfirst($plg->plaintext);
        $b = $a->plaintext;
        $data2 = file_get_html('http://acm.timus.ru/status.aspx?space=1&num='.$b.'&author=133892');
  echo "<table><tr><td style = 'color: darkgreen;'>".$b."</td>";
    foreach($data2->find('.date') as $c){
        if (isset($plg->plaintext)) $plgObj = 'plgContent' . ucfirst($plg->plaintext);
        $text = "<td style='border: 1px solid black;'>".$c->plaintext."</td>";
$pattern = "|<td style='border: 1px solid black;'>Date</td>|s"; 
$text = preg_replace($pattern, "", $text); 
echo $text;
         }  
echo "</tr></table>";        
}
         }      
?>
Единственная беда - парсит всё подряд, а не первую успешную сдачу=(
0
Allexxisss
60 / 60 / 9
Регистрация: 04.02.2012
Сообщений: 214
18.08.2014, 15:10 #4
ну так а где у тебя проверка то собственно?

Добавлено через 16 секунд
выложи полный код со всеми доп файлами
0
And_Smi
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
18.08.2014, 15:15  [ТС] #5
Вот всё, что у меня есть по парсеру. Некоторые файлы могут быть с безумным кодом, но это просто я тот или иной файл переделываю, пытаюсь что-то сделать.
0
Вложения
Тип файла: rar parser.ru.rar (336.5 Кб, 4 просмотров)
And_Smi
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
19.08.2014, 00:54  [ТС] #6
Allexxisss, что там?
0
Allexxisss
60 / 60 / 9
Регистрация: 04.02.2012
Сообщений: 214
19.08.2014, 12:05 #7
And_Smi, на работе запара. Постараюсь сегодня посмотреть
0
And_Smi
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
19.08.2014, 12:17  [ТС] #8
Allexxisss, да понимаю, не спеши
0
And_Smi
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
21.08.2014, 15:18  [ТС] #9
Allexxisss, посмотрел? У меня есть соображения с помощью регулярных выражений провернуть, но к сожалению не понимаю их
0
ads
364 / 371 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
21.08.2014, 15:30 #10
Цитата Сообщение от And_Smi Посмотреть сообщение
У меня есть соображения с помощью регулярных выражений провернуть, но к сожалению не понимаю их
изучение их занимает 20 минут. Час - и вы мастер. Но понимаю, лень...
0
And_Smi
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
21.08.2014, 15:34  [ТС] #11
ads, не лень, въехать надо. Если вы так говорите, то я думаю вы сможете поделиться ссылкой на хорошую инфу про рег выражения? Сори за оффтоп.
0
ads
364 / 371 / 89
Регистрация: 01.12.2013
Сообщений: 1,629
21.08.2014, 15:40 #12
А поиск? согласен. Тяжело. Но хотя бы начать. https://ru.wikipedia.org/wiki/%D0%A0...BD%D0%B8%D1%8F
0
And_Smi
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
21.08.2014, 15:48  [ТС] #13
ads, вы сейчас настроены на то, чтобы оскорбить? Спасибо, не надо. А если вы считаете википедию источником информации то мне с вами не о чем разговаривать.
0
ads
21.08.2014, 15:51
  #14

Не по теме:

оскорбляются, обычно, желающие оскорбиться. Зря вы википедию не читали. не было бы лишних слов

0
And_Smi
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
21.08.2014, 15:56  [ТС] #15
ads, вы меня назвали лентяем, сказали, что тяжело поиском воспользоваться и вы еще говорите, что я желающий оскорбиться? Википедию не читаю вообще так как половина информации находится ложная и этот сайт уже заблокирован для доступа у меня. Короче, разговоры ведут в некуда, если хотите о чем-то поговорить - личка открыта. Хватит оффтопить..
0
And_Smi
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
25.08.2014, 08:27  [ТС] #16
Помогите модернизировать скрипт, а именно чтобы выводил дату только самой ранней успешной сдачи какой-либо задачи. А то выводит все даты сдач.
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$data = file_get_html('http://acm.timus.ru/author.aspx?id=133892');
set_time_limit(0);
 
if($data->innertext!='' and count($data->find('td'))){
 
    foreach($data->find('.accepted') as $a){
 
        if (isset($plg->plaintext)) $plgObj = 'plgContent' . ucfirst($plg->plaintext);
        $b = $a->plaintext;
        $data2 = file_get_html('http://acm.timus.ru/status.aspx?space=1&num='.$b.'&author=133892');
  echo "<table><tr><td style = 'color: darkgreen;'>".$b."</td>";
    foreach($data2->find('.date') as $c){
        if (isset($plg->plaintext)) $plgObj = 'plgContent' . ucfirst($plg->plaintext);
        $text = "<td style='border: 1px solid black;'>".$c->plaintext."</td>";
$pattern = "|<td style='border: 1px solid black;'>Date</td>|s"; 
$text = preg_replace($pattern, "", $text); 
echo $text;
         }  
echo "</tr></table>";        
}
         }      
?>

Или этот:
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
<?php
include 'simple_html_dom.php';
require_once 'simple_html_dom.php';
$data = file_get_html('http://acm.timus.ru/author.aspx?id=133892');
set_time_limit(0);
 
if($data->innertext!='' and count($data->find('td'))){
 
foreach($data->find('.accepted') as $a){
 
if (isset($plg->plaintext)) $plgObj = 'plgContent' . ucfirst($plg->plaintext);
$b = $a->plaintext;
$data2 = file_get_html('http://acm.timus.ru/status.aspx?space=1&num='.$b.'&author=133892');
echo "<table><tr><td style = 'color: darkgreen;'>".$b."</td>";
preg_match_all('#
<tr[^>]*>
<td\sclass="id">(.+?)</td>
<td\sclass="date">(.+?)</td>
<td\sclass="coder">(.+?)</td>
<td\sclass="problem">(.+?)</td>
<td\sclass="language">(.+?)</td>
<td\sclass="verdict_ac">Accepted</td>
<td\sclass="test">(.+?)</td>
<td\sclass="runtime">(.+?)</td>
<td\sclass="memory">(.+?)</td>
</tr>
#iSsux', $data2, $matches);
if(!count($matches[0])){
die("Not found");
}
$last = count($matches[0])-1;
echo $matches[0][$last];
 
}
} 
?>
Тут я смог достичь вывода полной информации, но к сожалению она лишняя, нужна лишь дата. Минус в том, что в некоторых задачах он выводит и ошибочные сдачи задач.
0
25.08.2014, 08:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.08.2014, 08:27

Вероятность успешной сдачи экзамена
Добрый день уважаемые форумчане!. Помогите с решением одной задачи. Заранее...

Вывести на экран имя файла с самой ранней или поздней датой
добрый день! Необходимо написать командный файл windows, который в зависимости...

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


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru