Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 35

Парсинг билетов ПДД

20.11.2013, 02:43. Показов 4349. Ответов 50
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Необходимо спарсить страницу http://sporic.ru/tickets1.html.
А именно, необходимо на выходе получить многомерный массив такого типа: скажем нулевым элементом массива будет массив, который состоит из полей: номер вопроса, ссылка на картинку вопроса, сам вопрос, варианты ответа, правильный вариант ответа, количество вариантов ответа, комментарий.
Т.е. скажем если брать первый вопрос, то в массиве он должен выглядеть так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
$array = Array(
Array(
"number" => 1,
"link" => "/images/stories/shcool/bileti/b1/blank.jpg",
"question" => "Какие транспортные средства по Правилам относятся к маршрутным транспортным средствам?",
"var_1" => "1. Все автобусы.",
"var_2" => "2. Автобусы, троллейбусы и трамваи, предназначенные для перевозки людей и движущиеся по установленному маршруту с обозначенными местами остановок.",
"var_3" => "3. Любые транспортные средства, перевозящие пассажиров.",
"true" => 2,
"count_var" => 3,
"commend" => "Это определение просто нужно запомнить")
);
Пытался парсить сам, но получается ерунда, сутки промучился, не спал сутки, психанул и стёр весь бесполезно написанный код.
Прошу помощи. Если можно, то лучше сам код, чтобы я не сидел сутками. Вам это будет не лишней практикой, а для меня это будет как гора с плеч.
Заранее всем огромнейшее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.11.2013, 02:43
Ответы с готовыми решениями:

Определить количество счастливых билетов в рулоне проездных билетов
Написать функцию определяющую количество счастливых билетов в рулоне проездных билетов. Считать ,что рулон начинается с билета №423445 и...

Имеется 2000 билетов, 10 из них выиграшные. У меня 10 билетов. Найти вероятность что выиграет хотя бы один
Имеется 2000 билетов, 10 из них выиграшные. У меня 10 билетов. Найти вероятность что выиграет хотя бы один решение Вероятность что...

В лотерее разыгрывалось 100 билетов. Таблица содержит 10 номеров выигрышных билетов. Проверьте, является ли билет с номером N выигрышным
СРончо ОЧЕНЬ ПРОШУ В лотерее разыгрывалось 100 билетов. Таблица содержит 10 номеров выигрышных билетов. Проверьте, является ли...

50
PHP developer
 Аватар для masik49
259 / 157 / 26
Регистрация: 20.03.2013
Сообщений: 1,018
20.11.2013, 13:48
Если будет время вечером, постараюсь помочь Вам с вашим вопросом. На первый взгляд зацепиться там мало за что есть, по чему идентифицировать каждый вопрос и ответ.
------------
А можете по секрету сказать для чего Вам это необходимо?
0
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 35
20.11.2013, 18:13  [ТС]
Цитата Сообщение от masik49 Посмотреть сообщение
А можете по секрету сказать для чего Вам это необходимо?
Могу. Курсовая работа у меня такая. Вообщем суть курсовой работы- это сайт с экзаменом пдд, но вся фишка в том, препод сказал, что я должен спарсить все билеты с ответами и занести их в бд, естественно работу скрипта придётся ему показывать. В бд занести проблем, а вот с парсером до сих пор, лажа, других сайтов, где будет лучше парсить, не нашёл.
Буду премного благодарен, если Вы поможете мне.
0
20.11.2013, 18:35

Не по теме:

А где такие вузы, что PHP преподают?

0
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 35
20.11.2013, 19:17  [ТС]
У нашего направления пока что не преподают пых, но зато дают курсовые, где без пыха ничего не сделать, а преподавать позже должны, но и то в сокращённой форме, т.е. только базовые знания) Я для себя изучал пых, но только для создания движков сайта и т.д., парсингом особо не приходилось заниматься, а если и приходилось, то было всё гораздо проще.
0
20.11.2013, 19:38

Не по теме:


Цитата Сообщение от nonamez123 Посмотреть сообщение
А где такие вузы, что PHP преподают?
PHP преподают либо на специальных курсах либо самостоятельное изучение.
Хотя может быть где то и преподают. Но в основном все сами постепенно осваивают :)
Самое главное было бы желание!!!

0
ищите меня в нирване
 Аватар для your_tremor
36 / 36 / 5
Регистрация: 23.10.2013
Сообщений: 198
20.11.2013, 20:02
Цитата Сообщение от DoKWeB Посмотреть сообщение
Могу. Курсовая работа у меня такая. Вообщем суть курсовой работы- это сайт с экзаменом пдд, но вся фишка в том, препод сказал, что я должен спарсить все билеты с ответами и занести их в бд, естественно работу скрипта придётся ему показывать. В бд занести проблем, а вот с парсером до сих пор, лажа, других сайтов, где будет лучше парсить, не нашёл.
Буду премного благодарен, если Вы поможете мне.
А я смотрю, все больше и больше людей согласно результатам парсеров ездят... Можете фамилию препода сказать? Завтра, все равно в прокуратуру ехать.
0
 Аватар для JxF-TEAM
122 / 122 / 27
Регистрация: 22.10.2013
Сообщений: 425
20.11.2013, 20:11
бегло посмотрел.. проблем в парсинге вообще нету.. все в странице
20 вопросов
http://sporic.ru/tickets[1..40].html
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
20.11.2013, 21:42

Не по теме:

Цитата Сообщение от nonamez123 Посмотреть сообщение
А где такие вузы, что PHP преподают?
там, где я сейчас учусь, грозятся пых преподавать (мельком вроде, 1 семестр)


Цитата Сообщение от DoKWeB Посмотреть сообщение
дают курсовые, где без пыха ничего не сделать
такого не бывает.. Если, конечно, не требуется сделать что-то именно с использованием пыха.

Не по теме:

Цитата Сообщение от your_tremor Посмотреть сообщение
Завтра, все равно в прокуратуру ехать
Ну приедете туда, и? Где-то есть неправомерный доступ к компьютерной информации? Миллионы сайтов парсят те же RSS, и что? Вы с законами сначала определитесь, что ли..

0
20.11.2013, 21:44

Не по теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
Вы с законами сначала определитесь, что ли..
я с моралью определился. Не знаю как вы

0
21.11.2013, 07:39

Не по теме:

Цитата Сообщение от KOPOJI Посмотреть сообщение
такого не бывает.. Если, конечно, не требуется сделать что-то именно с использованием пыха.
Возможно тут дело интузиазма - я буду делать курсовую на php, я на c++, я на js и так далее. Возможно поэтому DoKWeB и выбрал в качестве языка php для курсовой :)
Ну это мои предположения конечно :)

0
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 35
21.11.2013, 16:51  [ТС]
Цитата Сообщение от masik49 Посмотреть сообщение
Возможно тут дело интузиазма - я буду делать курсовую на php, я на c++, я на js и так далее. Возможно поэтому DoKWeB и выбрал в качестве языка php для курсовой
Ну это мои предположения конечно
Ну почти так и было. Было на выбор: презентация, приложение на c# в консоли или формы, сайт на готовом движке или сайт с нуля на любую тему. Вот я и выбрал сайт с нуля. Было много тем, на которые можно сделать сайт, но я выбрал свою- Экзамен ПДД. Скрипт уже написал для экзамена, протестил, всё работает. Осталось спарсить все билеты и записать их в базу данных. Пробовал вновь парсить тот сайт, но также безрезультатно. Там особо не за что зацепиться, вот и пришлось просить помощи на этом форуме.
0
 Аватар для JxF-TEAM
122 / 122 / 27
Регистрация: 22.10.2013
Сообщений: 425
21.11.2013, 17:28
а попробуйте руками переписать билеты....
сайт на готовом движке или сайт с нуля на любую тему
...
0
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 35
21.11.2013, 17:42  [ТС]
Цитата Сообщение от JxF-TEAM Посмотреть сообщение
а попробуйте руками переписать билеты....
Вручную гемор, проще спарсить.
Цитата Сообщение от JxF-TEAM Посмотреть сообщение
сайт на готовом движке или сайт с нуля на любую тему
...
Что вам тут не нравится? На движке и с нуля это разные вещи.

Добавлено через 3 минуты
Вообщем достаточно уже оффтопа.
Я обратился за помощью, а не для того, чтобы подробности обучения спрашивали.
Если нечем помочь, то просто пройдите мимо, а если хоть чем-то можете помочь, то пишите свои мысли. Хотя бы алгоритм парсинга того сайта, где не за что цепляться, кроме тегов <span>, ну или другой сайт с билетами и ответами на них подскажите, мб там проще будет парсить.
0
 Аватар для JxF-TEAM
122 / 122 / 27
Регистрация: 22.10.2013
Сообщений: 425
21.11.2013, 17:46
сложна его парсить... регулярка так и не вышла..
0
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 35
21.11.2013, 18:00  [ТС]
Цитата Сообщение от JxF-TEAM Посмотреть сообщение
сложна его парсить... регулярка так и не вышла..
вот поэтому и написал сюда. А вы на первой странице писали, что проблем в парсинге быть не должно, так вот я также думал, но, попробовав, понял, что это не так.
0
 Аватар для JxF-TEAM
122 / 122 / 27
Регистрация: 22.10.2013
Сообщений: 425
21.11.2013, 19:21
угу.. там не классов не ида могут быть стронги и вообще пустые с <BR>...

Добавлено через 1 час 5 минут
вот что у меня вышло... вроде норм читает

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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
set_time_limit ( 0 );
 
function getBlock ( $content , &$pos , $tag = "div" , $fl_change = true ) {
 
    $openTag  = "<"  . $tag;
    $closeTag = "</" . $tag;
    
    $openPos  = strpos ( $content , $openTag , strpos ( $content , $openTag , $pos ) );
    $closePos = $openPos;
 
    if ( $pos === false )
        return substr ( $content , $pos ) . $closeTag . ">";
    if ( $openPos === false )
        return substr ( $content , $pos , $closePos - $pos ) . $closeTag . ">";
    
    while ( !( $openPos > $closePos || $openPos === false || $closePos === false ) ) {
        
        $openPos  = strpos ( $content , $openTag , $openPos + 1 );
        
        $closePos = strpos ( $content , $closeTag , $closePos + 1 );    
                
    }
    
    $tmpPos = $pos;
    
    if ( $fl_change )
        $pos = $closePos;
    
    return substr ( $content , $tmpPos , $closePos - $tmpPos ) . $closeTag . ">";
 
}
 
function getQuestion ( &$content , &$pos ) {
 
    $info = new stdClass ();
    $info -> html = new stdClass ();
 
    $fl = 0;
    while ( $fl === 0 && !( $pos === false ) ) {
    
        $pos = strpos ( $content , "<span style=\"font-size: 12pt;\">" , $pos );
        $tmp = getBlock ( $content , $pos , "span" );
        
        if ( ( $fl = preg_match ( "/Вопрос/si" , $tmp ) ) > 0 )
            $info -> html -> numQuestion = $tmp;
 
    }
 
    $pos = strpos ( $content , "<span style=\"font-size: 12pt;\">" , $pos );
    $info -> html -> image = getBlock ( $content , $pos , "span" );
 
    $pos = strpos ( $content , "<span style=\"font-size: 12pt;\">" , $pos );
    $info -> html -> question = getBlock ( $content , $pos , "span" );
 
    
    $end_block_pos = strpos ( $content , "<em" , $pos );
    $info -> html -> comment = getBlock ( $content , $tmp = $end_block_pos , "em" );
        $_pos = $pos;
            
    while ( $_pos < $end_block_pos ) {
    
        if ( ( $_pos = strpos ( $content , "<span style=\"font-size: 12pt;" , $_pos + 1 ) ) === false )
            break;
        $tmp = getBlock ( $content , $_pos , "span" );
        
        if ( ( preg_match ( "/\>[0-9]*?\./si" , $tmp ) ) > 0 ) {
 
            $info -> html -> answers [] = $tmp;
        
            $pos = $_pos;
            
        }
                
    }
    
    $info -> numQuestion = preg_replace ( "/\<.*?\>/si" , "" , $info -> html -> numQuestion );
    preg_match ( "/src.*?\=.*?\"(.*?)\"/si" , $info -> html -> image , $res );
    $info -> image = $res [ 1 ];
    $info -> question = preg_replace ( "/\<.*?\>/si" , "" , $info -> html -> question );
    $info -> comment = preg_replace ( "/\<.*?\>/si" , "" , $info -> html -> comment );
    $info -> answers = Array ();
    foreach ( $info -> html -> answers as $val )
        $info -> answers [] = preg_replace ( "/\<.*?\>/si" , "" , $val );   
    
    return $info;
 
}
 
function getQuestionS ( &$content ) {
 
    $count = min ( preg_match_all ( "/Вопрос/si" , $content ) , 20 );
 
    $result  = Array ();
    
    $pos = 0;
    $pos = strpos ( $content , "<span style=\"font-size: 12pt;\">" , $pos );
    
    for ( $i = 1; $i <= $count; $i++ )
        $result [ $i ] = getQuestion ( $content , $pos , getBlock );
 
    return $result;
    
}
 
function getTickets () {
 
    $content = file_get_contents ( "http://sporic.ru/tickets1.html" );
    
    $result = Array ();
    
    for ( $i = 1; $i <= 40; $i++ )
        if ( $content = file_get_contents ( "http://sporic.ru/tickets" . $i . ".html" ) )
            $result [ $i ] = getQuestionS ( $content );
            
    return $result;
 
}
 
 
echo "<PRE>";
 
$info = getTickets ();
 
echo $info [ 1 ] [ 1 ] -> numQuestion . "<BR>";
echo $info [ 1 ] [ 1 ] -> image . "<BR>";
echo $info [ 1 ] [ 1 ] -> question . "<BR>";
echo $info [ 1 ] [ 1 ] -> comment . "<BR>";
foreach ( $info [ 1 ] [ 1 ] -> answers as $val )
    echo $val . "<BR>";
 
 
 
echo $info [ 1 ] [ 1 ] -> html -> numQuestion . "<BR>";
echo $info [ 1 ] [ 1 ] -> html -> image . "<BR>";
echo $info [ 1 ] [ 1 ] -> html -> question . "<BR>";
echo $info [ 1 ] [ 1 ] -> html -> comment . "<BR>";
foreach ( $info [ 1 ] [ 1 ] -> html -> answers as $val )
    echo $val . "<BR>";
Добавлено через 58 секунд
жаль регуляркой ни как не выходит...
0
PHP developer
 Аватар для masik49
259 / 157 / 26
Регистрация: 20.03.2013
Сообщений: 1,018
21.11.2013, 20:05
Цитата Сообщение от JxF-TEAM Посмотреть сообщение
сложна его парсить... регулярка так и не вышла..
Там за элементы сложно уцепиться, слишком однообразная структура.
Практически одни элементы p.
0
 Аватар для JxF-TEAM
122 / 122 / 27
Регистрация: 22.10.2013
Сообщений: 425
21.11.2013, 20:13
ага
я уцепился за
<span style=\"font-size: 12pt;\">
и <em

... можно былоб и на регулярках вытащить все кроме ответов.. но тогда если гдето в ответах ошибка будет потом не синхронизируешь их
0
0 / 0 / 0
Регистрация: 19.06.2013
Сообщений: 35
21.11.2013, 20:22  [ТС]
Цитата Сообщение от JxF-TEAM Посмотреть сообщение
вот что у меня вышло... вроде норм читает
что-то не работает у меня( выводит кучу ошибок, связанных с preg_match_all и foreach.

Добавлено через 6 минут
такие вот ошибки:
Warning: preg_match_all() expects at least 3 parameters (ожидается как минимум три параметра)
Warning: Invalid argument supplied for foreach() (неверный аргумент)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.11.2013, 20:22
Помогаю со студенческими работами здесь

Пдд
Можно ли совершать опережение транспортных средств, на железно-дорожных переездах, имеющих две полосы для движения в одном направлении???

Тест ПДД на С#
проблема вот в чем не знаю как сделать так что бы правильные ответы считались на каждой форме(их будет около 20,это будет полный билет ПДД)...

on-line тест пдд
Здравствуйте, не уверен что правильно выбрал раздел для темы, за что прошу прощения. Вопрос в следующем какими способами можно вообще...

Экзамен ПДД в Access
Здравствуйте. Нужна помощь в создании экзамена по ПДД. Выдали задание, но даже не знаю с чего начать. Все знания уже давно убыли. ...

Создать тест ПДД
День добрый, задача такова: нужно создать тест ПДД, (строго на С) из 5 вопросов с 3 вариантами ответов. В конце теста выводится количество...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение Это мой обзор планшета X220 с точки зрения школьника. Недавно я решила попытаться уменьшить свой. . .
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
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru