Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|

30.11.2009, 19:00
|
|
Участник форума
Регистрация: 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..
|
|
|

30.11.2009, 19:14
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме: 1698585
Репутация:
818
|
|
Вот ещё вопрос: почему в 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'
|
|
|

30.11.2009, 21:32
|
|
Участник форума
Регистрация: 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);
|
|
|

30.11.2009, 21:52
|
|
Познающий
Регистрация: 30.11.2009
Сообщений: 97
Провел на форуме: 333264
Репутация:
80
|
|
programming
По идее, как ты составил должен выплевывать тебе символ новой строки + 3 табуляции.
Там довольно редко стречается табуляция так что можно зацепиться за нее (Вообще можно просто искать по маске \+\d+ но не факт, что на странице не будет чего-то вроде +0, что не является кодом страны). Так что получается что-то вроде:
|
|
|

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

30.11.2009, 23:34
|
|
Познающий
Регистрация: 30.11.2009
Сообщений: 97
Провел на форуме: 333264
Репутация:
80
|
|
programming
По регулярке собираешь id всех страниц, затем перебирая их открываешь страницу http://www.ozon.travel/countries/{{ id }}/ и выдергиваешь оттуда описание.
Id стран можно искать на странице http://www.ozon.travel/countries/ по регулярке:
Код:
<li><a href="(\d+)/">
Дальше уже ищешь полное описание и записываешь, допустим, для каждой страны в свой файл.
|
|
|

01.12.2009, 17:05
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 138
Провел на форуме: 201522
Репутация:
18
|
|
Это всё само собой понятно. Проблема вытащить само описание, а точнее составить регулярку, которая подходила бы ко всем странам.
|
|
|

01.12.2009, 17:19
|
|
Познающий
Регистрация: 30.11.2009
Сообщений: 97
Провел на форуме: 333264
Репутация:
80
|
|
Ну смотри в исходнике страницы за что можно зацепиться. Перед самим контентом можно зацепиться за класс breadcrumb, после контента за класс футера.
|
|
|

01.12.2009, 18:56
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме: 1698585
Репутация:
818
|
|
Сообщение от 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() в нужных местах.
|
|
|

01.12.2009, 19:53
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 138
Провел на форуме: 201522
Репутация:
18
|
|
Всё-таки то, что хочу я, наверное, невозможно реализовать..
В случае с Данией действительно вырывается всё отлично.
#</p><p><b>(.*)</b>(.*?)</p><h1># но что если в описании страны нет жирного шрифта?? В некоторых случаях он вообще не выдёргивает, в некоторых выдёргивает один абзац из нескольких, в котором есть жирный шрифт.
В общем бред с этой задачей..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|