![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Доброго времени суток. Задача такая:
с помощью cURL, sockets, fopen, file_get_contents (или любым другим способом) получить содержимое страницы и выдезать только часть между:
И далее работать с этим текстом. Как это осуществить и чем лучше? Их вышеперечисленного не работал ниразу с cURL, но говорят они лидеры в этом :-) Что посоветуете? |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 5 Всего: 261 |
||||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Ну с ними умею. А вот с cURLами не работал. Советуешь для данной задачи что использовать?
Я могу сокетами получить содержимое всей страницы, а как только ее часть, подскажи плз ) |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 5 Всего: 261 |
||||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
||||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 5 Всего: 261 |
Регулярками
![]() |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Да это понятно, но не выходит у меня. Вот что пишу, но явно что бред...
В общем мне нужно получить это: TEST===TEST===TEST===TEST Это сообщение отредактировал(а) Aliance - 13.5.2006, 21:44 |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 5 Всего: 261 |
|
|||
|
||||
Aliance |
|
||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Спасибо, помогло. А реально ли усовершенствовать это так:
возьмем переменную $mas[0][0] и сделаем такую вещь:
Далее берем первый элемент - $new_mas[0], его текст таков:
И нужно получить все выделенные фрагменты. Тут я вообще сомневаюсь, что такое возможно. Текст большой (я все пробелы и табуляцию удалил, их полно перед строчками), регулярками наверное никак... |
||||
|
|||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 5 Всего: 261 |
Можно вычленить и такое.
Только тут лучше будет текст целиком прогнать, как есть. При этом, важно чтобы код HTML был хотя бы валидным с точки зрения синтаксиса. Когда я писал подцветку, я все то сделал. Тут несколько попроще...
А вот значения, уже так просто не получится... Тут уже надо конкретизировать как-то. |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
А уточнять нечего
![]() Вот, единственное что менется - это выделенные слова. Их-то мне и нужно заполучить. Есть много тсраниц, на каждой от 0 до бесконечности таких блоков. Я планировал циклом прокрутить, получить все эти слова и забить в БД свою, выполнять скрипт кроном. Впринципе сейчас с твоей помощью у меня сам этот текст есть, но если я его так буду вставлять на страницу - то это никак не подойдет под мой дизайн. Хотелось бы иметь отдельные необходимые слова. Очень нужна это вещь, просто без нее не пишется ничего другое, т.к. на этом все основано ![]() Добавлено @ 23:06 Может по строчкам просто рзбивать сперва? |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 5 Всего: 261 |
Aliance, дай линк откуда надо стырить. В принципе все можно сделать.
|
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Дык линков много. Могу дать парочку, поймешь думаю закономерность :-)
http://capitalcity.combats.ru/encicl/crutch.html http://capitalcity.combats.ru/encicl/shirt.html Делаю энциклопедию предметов из этой игры. Т.к. предметы изменяються/добавляются + их очень много - в ручную заносить в БД - это непосильная работа. |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 5 Всего: 261 |
Это сообщение отредактировал(а) Mal Hack - 14.5.2006, 01:54 |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Пустой массив получается
![]()
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 5 Всего: 261 |
|
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Все работает почти идеально! :-)
Пойду писать, какие будут вопросы по ходу, буду задавать! ЗЫ: получай, гений, +1 ![]() |
|||
|
||||
Aliance |
|
||||||||||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Итак, совместил 2 кода, вот он:
Все выходит, но это лишь первый элемент ($mas[0][0]). В перспективе я бы хотел циклом перебирать и резать все вхождения ($mas[0][$i]). Проблем нет, кроме одной: в первый элемент имеет 2 и 3 лишние строчки, которые мешают. Вот они:
Их нужно вырезать, думаю. Вот значение переменной $mas[0][0] для данного кода:
Она получается путем этой строчки кода из всего исходного текста кода:
Далее мы делит эту переменную с помощью функции explode (в данном случае получается 2 элемента):
Если не очень понятно изъяснился - скажите, напишу полностью код с циклом и покажу чего именно не получается. |
||||||||||
|
|||||||||||
Wowa |
|
||||||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
Mal Hack, чем не нравится file_get_contents ?
Добавлено @ 17:30
Да, два.. Но использовать <br /> разграничителем ненадежно. Попробуй может хотя бы так, чтобы на переходы строк еще ориентироваться.
А теперь доступ через $data[0] и $data[1] Или можешь сразу в переменные, а не в массив: list($mydata1, $mydata2) = explode("\n<br />\n", $mas[0][0]); |
||||||
|
|||||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Wowa, твой код с переменной $to_del не подходит. Так как эти строчки меняются.
А на счет так тут да, так канечно лучше, но посмотри в исходники страницы этой: http://capitalcity.combats.ru/encicl/crutch.html Там все сделано именно так, чтобы программисты могли ее парсить. Обычные переносы там такие: <BR>, а разделитель именно такой: <br /> Но вообще тут я с тобой согласен ![]() Вообще страницы там более менее одинаковые. Меняются данные, которые мне и нужно заполучить. Если бы не эти строчки - все бы было супер :-( |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 5 Всего: 261 |
Работает с удаленными файлами только при определенных настройках ПХП. А это дыра в безопасности. Тебе вообще не так делать надо было ![]() Вот:
|
|||
|
||||
Wowa |
|
|||
Эксперт ![]() Профиль Группа: Админ Сообщений: 15017 Регистрация: 14.9.2000 Где: Винград Репутация: нет Всего: 290 |
||||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Mal Hack, не могу получить это:
Хотя вот здесь мы это получили: http://forum.vingrad.ru/index.php?showtopi...st&p=730640 Это сообщение отредактировал(а) Aliance - 14.5.2006, 18:26 |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 5 Всего: 261 |
|
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Вот конечный, работающий вариант:
Это сообщение отредактировал(а) Aliance - 14.5.2006, 19:09 |
|||
|
||||
regret |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 19.5.2006 Репутация: нет Всего: нет |
вот блин!!! ищу в реале таких как ты для
![]() (код скопировал себе в архивчеГ- пригодитсо ![]() Это сообщение отредактировал(а) regret - 22.7.2006, 21:25 |
|||
|
||||
Guest |
|
|||
Unregistered |
Уважаемые господа, не могли бы вы "прочитать" конструкцию типа (.*?) или (.+?), так вот как бы логика ястна, но не везде. И ещё в некоторых местах используется ключ #s - "<\!\-\-\sEnd\sof\stext\s\-\->#s" зачем он здесь и как бы он работал без него?
Спасибо, извеняюсь за ламерсие вопросы, но не мог найти оввет на них в другом месте |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Первое - это управление жадностью квантификаторов. Про них читай в книгах о регульрных выражениях.
Второе - это модификатор s, обозначабщий строчность данных, где происходит поиск/замена. О них читай там же. Это сообщение отредактировал(а) Aliance - 9.10.2006, 14:54 |
|||
|
||||
Guest |
|
|||
Unregistered |
Большое спасибо, теперь буду знать что искать
![]() |
|||
|
||||
dvska |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 30.1.2006 Репутация: нет Всего: 9 |
Немного оффтоп, потому как не PHP (а Python), но
Посмотрите какая рульная либа: http://www.crummy.com/software/BeautifulSo...umentation.html --------------------
|
|||
|
||||
pnd_ku |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 25.9.2006 Репутация: нет Всего: 1 |
Вечер добрый!
В получении странички по сокету есть подводный камень, я не знаю как его обойти. Камень этот в размере буфера. Штука такая - если буфер больше чем примерно 2*1024 то в контенте странички появляются строчки такова вида \r\n[a-f0-9]{4}\r\n - в общем шестнадцатиричное число, окруженное переносами строк. Если же буфер меньше чем 2*1024, то периодически теряется по символу из получаемых данных. Как обойти, и что это вообще за такое я так и не осознал. Может кто встречался, и знает причину/решение? Спасибо! |
|||
|
||||
sTa1kEr |
|
|||
9/10 программиста ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1553 Регистрация: 21.2.2007 Репутация: нет Всего: 146 |
pnd_ku, это называется в протоколе HTTP 1.1 Chunked Transfer Coding. Если сервер передал заголовок "transfer-coding: chunked", то данные будут передаваться не одним потоком, а по блокам с динамическим размером. hex числа - это длина следующего блока. Данные будут передаваться пока длина блока не будет 0.
Если не хотите получать данные по блокам, то используйте протокол HTTP 1.0 |
|||
|
||||
pnd_ku |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 25.9.2006 Репутация: нет Всего: 1 |
Спасибо большое, а то я уж и не знал что подумать
![]() |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Сеть | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |