X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость ( Вход | Регистрация )

Открыть тему
Тема закрыта
> Учим Php: Парсер своими руками. Теория.
ram
ram
Topic Starter сообщение 25.12.2009, 16:23; Ответить: ram
Сообщение #1


Бывалый
****

Группа: User
Сообщений: 317
Регистрация: 30.4.2009
Из: Гомель
Поблагодарили: 115 раз
Репутация:   21  


Вторая моя статья на тему программирования. В ней даны теоритические данные о написании парсера/граббера на php. Это не самый лучший метод, но он имеет место существовать. В статье описаны функции и алгоритм написания. Статья написана полностью на основе собственного опыта.

парсер на php


--------------------
тут была подпись ;)


Поблагодарили: (2)
3
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Magir
Magir
сообщение 25.12.2009, 16:37; Ответить: Magir
Сообщение #2


Участник
***

Группа: User
Сообщений: 213
Регистрация: 4.12.2009
Из: Санкт-Петербург
Поблагодарили: 69 раз
Репутация:   13  


Слишком сложно)
Парсер сообщений на этой странице:
<?
$lines=file_get_contents('http://talk.maulnet.ru/topic42836.html?pid=500812&st=0&');
preg_match_all('|<span class="normalname">.*<a href=\'http://talk.maulnet.ru/.*\'>(.*)</a>.*<div class="postcolor" id=\'post-.*\'>(.*)</div>|Us',$lines,$matches);
$result=array();
for ($i=0;$i<count($matches);$i++){
$result[$matches[1][$i]]=$matches[2][$i];
}
print_r($result);
?>


Результат:
Array
(
    [ram] =>
                                Вторая моя статья на тему программирования. В ней даны теоритические данные о написании парсера/граббера на php. Это не самый лучший метод, но он имеет место существовать. В статье описаны функции и алгоритм написания. Статья написана полностью на основе собственного опыта.<br /><br /><a href="http://romka.name/2009/12/parser-svoimi-rukami-teoriya.html" target="_blank">парсер на php</a>


                                <!--IBF.ATTACHMENT_500812-->
)

Ну мусор там еще убрать типа тегов и т.п.)

Самое сложное - открыть исходный код страницы которую парсим и написать регулярку)
Ну и иногда нужно вместо file_get_contents использовать cURL или свою функцию с поддержкой Referer и Cookie.


Да) еще я не понял почему данные из урла Вы читаете через file_get_contents, а в файл через file_put_contents не пишете)


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ram
ram
Topic Starter сообщение 25.12.2009, 16:40; Ответить: ram
Сообщение #3


Бывалый
****

Группа: User
Сообщений: 317
Регистрация: 30.4.2009
Из: Гомель
Поблагодарили: 115 раз
Репутация:   21  


Ну я как бы и не намекал, что это самый лёгкий способ, но, например, я в регулярках не очень, ибо как-то не приходилось их использовать, поэтому для меня на данный момент этот способ легче =) Но безусловно с регулярками код меньше получается.

Да) еще я не понял почему данные из урла Вы читаете через file_get_contents, а в файл через file_put_contents не пишете)

file_put_contents это всё равно, что fopen + fwrite + fclose, только одной строкой.
Так я показал 3 функции, а так бы только одну =)

Во всяком случае у каждого свои тараканы в голове =)

Сообщение отредактировал ram - 25.12.2009, 16:42


--------------------
тут была подпись ;)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Magir
Magir
сообщение 25.12.2009, 16:50; Ответить: Magir
Сообщение #4


Участник
***

Группа: User
Сообщений: 213
Регистрация: 4.12.2009
Из: Санкт-Петербург
Поблагодарили: 69 раз
Репутация:   13  


Краткий ликбез: preg_match_all - эта функция находит по регулярки все её вхождения в исходном тексте, первый параметр - регулярка, второй - текст, третий - переменная для результата.
Регулярка пишется между двумя ограничителями, они могу быть любыми. Я обычно использую |. За ограничителями ставятся флаги, я использую постоянно сочетание Us (U - "таблетка от жадности" с ней все квантификаторы (*,?,+,{}) загребают в себя только пока не встретят следующий за ним код, s - чего-то там про перенос строк, забыл уже smile.gif ). Итого конструкция получается такая: |регулярка|Us
Сама регулярка для парсинга обычно очень простая. Достаточно почитать про основы регулярок хотя бы на википедии, разобрать парочку примеров и сразу всё получится)
Поясню мою регулярку:
<span class="normalname">.*<a href=\'http://talk.maulnet.ru/.*\'>(.*)</a>.*<div class="postcolor" id=\'post-.*\'>(.*)</div>

<span class="normalname"> - с этого начинаются ники
.* - выбрасываем весь мусор до <a ...
<a href=\'http://talk.maulnet.ru/.*\'> - выбрасываем ссылку, .* внутри - т.к. разные ссылки на профили
(.*) - тут у нас имя автора поста, его запоминаем (круглые скобки)
</a> - ограничитель для имени автора
.* - выкидываем кучу мусора между автором и постом)
<div class="postcolor" id=\'post-.*\'> - начало поста, .* - из-за разных id постов
(.*) - выделяем текст поста
</div> - ограничитель конца поста

В регулярке я некоторые моменты не учел, например мои посты из-за присутствия в них </div> обрезаются, это можно проанализировать и в конце дописать ограничителем текста поста не </div>, а <!--IBF.ATTACHMENT_.*-->


Если будут вопросы по PHP - обращайтесь в личку, готов помочь)


Поблагодарили: (1)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыA-Parser 1.1 - продвинутый парсер ПС, кейвордов, контента, показателей, 70+ парсеров.
169 Forbidden 103537 15.12.2017, 14:32
автор: AParser_Support
Открытая тема (нет новых ответов) Недорогие услуги - php/js/mysql/jquery/bootstrap
2 vlads 660 13.12.2017, 21:01
автор: vlads
Открытая тема (нет новых ответов) Веб-разработка (HTML5, CSS3, JavaScript, jQuery, Ajax, PHP)
18 qpPeW 3480 12.12.2017, 13:32
автор: qpPeW
Открытая тема (нет новых ответов) php скрипты любой сложности / диз+верстка (адаптивно)
любые задачи на php - автоматизация, парсинг, работа с БД
1 affrodita 511 8.12.2017, 17:40
автор: affrodita
Открытая тема (нет новых ответов) Нужен парсер контента
Уважаемые знатоки, требуется ваш совет или рекомендация.
4 m1h3y 1051 20.11.2017, 6:56
автор: Strellok


 



RSS Текстовая версия Сейчас: 17.12.2017, 18:23
Дизайн