ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #831  
Старый 30.11.2009, 19:00
Аватар для programming
programming
Участник форума
Регистрация: 26.08.2009
Сообщений: 138
Провел на форуме:
201522

Репутация: 18
По умолчанию

Цитата:
Сообщение от krypt3r  
Уж куда проще
PHP код:
preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/'$str$m); 
Спасибо. Ссылки достаются, а как достать названия стран?
Туго у меня идут эти регэкспы.. никак не могу разобраться..
Вот ещё вопрос: почему в preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/', $str, $m); выдирается именно ссылка, а не название?

И рег выражения могут выдирать русские буквы?

Последний раз редактировалось programming; 30.11.2009 в 19:11..
 
Ответить с цитированием

  #832  
Старый 30.11.2009, 19:14
Аватар для b3
b3
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме:
1698585

Репутация: 818


Отправить сообщение для b3 с помощью ICQ
По умолчанию

Цитата:
Вот ещё вопрос: почему в preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/', $str, $m); выдирается именно ссылка, а не название?
Выдирается тут все, разберем регулярку:
PHP код:
preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/'$str$m); 
В $m[0] будут находится все ссылки с HTML тегами, в $m[1]; будут находится первые вхождения заключенные в фигурные скобки, тоесть все что подходит под (\d+\/) в нашем выражении, ну и в $m[2]; будет все что попадает под (.+?)
Вообщем после регулярки напиши print_r($m); и сам все увидиш.
Цитата:
И рег выражения могут выдирать русские буквы?
Есесно '#[а-я]#i'
 
Ответить с цитированием

  #833  
Старый 30.11.2009, 21:32
Аватар для programming
programming
Участник форума
Регистрация: 26.08.2009
Сообщений: 138
Провел на форуме:
201522

Репутация: 18
По умолчанию

Цитата:
Сообщение от b3  
Выдирается тут все, разберем регулярку:
PHP код:
preg_match_all ('/<a href="(\d+\/)">(.+?)<\/a>/'$str$m); 
В $m[0] будут находится все ссылки с HTML тегами, в $m[1]; будут находится первые вхождения заключенные в фигурные скобки, тоесть все что подходит под (\d+\/) в нашем выражении, ну и в $m[2]; будет все что попадает под (.+?)
Вообщем после регулярки напиши print_r($m); и сам все увидиш.

Есесно '#[а-я]#i'
Спасибо.
Вот ещё проблема..
С http://www.ozon.travel/countries/16644/ нужно выдернуть код страны. Как составить рег выражение?
Составлял так:
PHP код:
preg_match_all('/Код страны:<\/strong>(.*)<\/p>/',$out1$regs1); 
 
Ответить с цитированием

  #834  
Старый 30.11.2009, 21:52
Аватар для whexp
whexp
Познающий
Регистрация: 30.11.2009
Сообщений: 97
Провел на форуме:
333264

Репутация: 80
По умолчанию

programming
По идее, как ты составил должен выплевывать тебе символ новой строки + 3 табуляции.
Там довольно редко стречается табуляция так что можно зацепиться за нее (Вообще можно просто искать по маске \+\d+ но не факт, что на странице не будет чего-то вроде +0, что не является кодом страны). Так что получается что-то вроде:
Код:
\t\t\t(\+\d+)</p>
 
Ответить с цитированием

  #835  
Старый 30.11.2009, 22:31
Аватар для programming
programming
Участник форума
Регистрация: 26.08.2009
Сообщений: 138
Провел на форуме:
201522

Репутация: 18
По умолчанию

Цитата:
Сообщение от whexp  
programming
По идее, как ты составил должен выплевывать тебе символ новой строки + 3 табуляции.
Там довольно редко стречается табуляция так что можно зацепиться за нее (Вообще можно просто искать по маске \+\d+ но не факт, что на странице не будет чего-то вроде +0, что не является кодом страны). Так что получается что-то вроде:
Код:
\t\t\t(\+\d+)</p>
Спасибо. Разобрался как выдергивать такие вещи.
Появилась ещё большая проблема. Есть допустим http://www.ozon.travel/countries/1727/ и http://www.ozon.travel/countries/6675/ , а также остальные страны с http://www.ozon.travel/countries/.
Каким образом возможно выдернуть описание с этих страниц? То есть, чтобы шаблон рег выражения подходил ко всем страницам стран. Выдернуть нужно только основное описание, то есть перелёты и т.д. не нужно..
Возможно ли такое осуществить?
 
Ответить с цитированием

  #836  
Старый 30.11.2009, 23:34
Аватар для whexp
whexp
Познающий
Регистрация: 30.11.2009
Сообщений: 97
Провел на форуме:
333264

Репутация: 80
По умолчанию

programming
По регулярке собираешь id всех страниц, затем перебирая их открываешь страницу http://www.ozon.travel/countries/{{ id }}/ и выдергиваешь оттуда описание.

Id стран можно искать на странице http://www.ozon.travel/countries/ по регулярке:
Код:
<li><a href="(\d+)/">
Дальше уже ищешь полное описание и записываешь, допустим, для каждой страны в свой файл.
 
Ответить с цитированием

  #837  
Старый 01.12.2009, 17:05
Аватар для programming
programming
Участник форума
Регистрация: 26.08.2009
Сообщений: 138
Провел на форуме:
201522

Репутация: 18
По умолчанию

Это всё само собой понятно. Проблема вытащить само описание, а точнее составить регулярку, которая подходила бы ко всем странам.
 
Ответить с цитированием

  #838  
Старый 01.12.2009, 17:19
Аватар для whexp
whexp
Познающий
Регистрация: 30.11.2009
Сообщений: 97
Провел на форуме:
333264

Репутация: 80
По умолчанию

Ну смотри в исходнике страницы за что можно зацепиться. Перед самим контентом можно зацепиться за класс breadcrumb, после контента за класс футера.
 
Ответить с цитированием

  #839  
Старый 01.12.2009, 18:56
Аватар для b3
b3
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме:
1698585

Репутация: 818


Отправить сообщение для b3 с помощью ICQ
По умолчанию

Цитата:
Сообщение от programming  
Спасибо. Разобрался как выдергивать такие вещи.
Появилась ещё большая проблема. Есть допустим http://www.ozon.travel/countries/1727/ и http://www.ozon.travel/countries/6675/ , а также остальные страны с http://www.ozon.travel/countries/.
Каким образом возможно выдернуть описание с этих страниц? То есть, чтобы шаблон рег выражения подходил ко всем страницам стран. Выдернуть нужно только основное описание, то есть перелёты и т.д. не нужно..
Возможно ли такое осуществить?
PHP код:
<?php
ini_set
('max_execution_time','0');


get_countries_info('http://www.ozon.travel/countries/1727/');


function 
get_countries_info($url)
{
    
$fp file_get_contents($url);
    if(
preg_match_all('#<p><strong>(.*): </strong>(.*)</p>#U'$fp$m))
    {
        foreach (
$m[0] as $str) {
            echo 
strip_tags($str).'<br>';
        }
    }
    
    if(
preg_match_all('#</p><p><b>(.*)</b>(.*?)</p><h1>#'$fp$m))
    echo 
strip_tags($m[0][0]);

}

?>
Выводит:
Цитата:
Столица: Копенгаген (Copenhagen) Ольборг (Alborg), Оденсе (Odense).
Разница во времени: отстает на 2 часа
Денежная единица: Датская крона/DKK, 1 EUR = ~7.4 DKK
Виза: нужна Шенгенская виза, стоимость визы 40 EUR
Цена за ужин: 25 EUR
Чаевые: в Дании не принято давать чаевые
Аренда машины: от 70 EUR
Государственный язык: датский
Население: 5200000
Дания — это маленькая страна, имеющая красивую природу и богатую историю. Вот уже более тысячи лет Данией правят короли и королевы. Дания состоит из 406 островов и имеет береговую линию протяженностью 4 800 километров, состоящую из песчаных пляжей, омываемых чистой и прозрачной морской водой. Площадь страны — 43 093 кв.км, не включая Гренландию и Фарерские острова, которые пользуются внутренней автономией.
ЗЫ Функция выводит все в UTF-8 поетому если будеш использовать повставляй iconv() в нужных местах.
 
Ответить с цитированием

  #840  
Старый 01.12.2009, 19:53
Аватар для programming
programming
Участник форума
Регистрация: 26.08.2009
Сообщений: 138
Провел на форуме:
201522

Репутация: 18
По умолчанию

Всё-таки то, что хочу я, наверное, невозможно реализовать..
В случае с Данией действительно вырывается всё отлично.
#</p><p><b>(.*)</b>(.*?)</p><h1># но что если в описании страны нет жирного шрифта?? В некоторых случаях он вообще не выдёргивает, в некоторых выдёргивает один абзац из нескольких, в котором есть жирный шрифт.
В общем бред с этой задачей..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi]/[Pascal] Задай вопрос, получи ответ Isis С/С++, C#, Delphi, .NET, Asm 6762 17.06.2010 21:23
[ *NIX ] Задай вопрос - получи ответ. Xszz *nix 1547 15.06.2010 15:41
[Lan] Задай вопрос - получи ответ! sedoy_xxx АнтиАдмин 133 31.03.2010 08:35
Всё о беспороводном соединении на кпк и смартфонах! Задай вопрос - получи ответ! ARMENIN Беспроводные технологии/WPAN/WLAN 2 02.11.2008 00:40
ЕсТь ВоПрос Guma Чаты 4 26.10.2005 21:48



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ