ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

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() в нужных местах.
|
|
|

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

01.12.2009, 19:56
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
Провел на форуме: 1698585
Репутация:
818
|
|
Как я заметил на всех страницах стиль оформления один, кинь мне несколько УРЛов где оформления разные, позже гляну.
|
|
|

01.12.2009, 20:11
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 138
Провел на форуме: 201522
Репутация:
18
|
|
http://www.ozon.travel/countries/590/
http://www.ozon.travel/countries/605/
|
|
|

02.12.2009, 19:53
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 138
Провел на форуме: 201522
Репутация:
18
|
|
В общем не могу придумать что делать с выдиранием описания..
А что если вырвать полное описание, а не первые абзацы? Например, на http://www.ozon.travel/countries/1032/ с Чем заняться путешественнику в Венгрии? Подлечиться-оздоровиться на термальных курортах, оценить далеко не бедную местную историческую «экскурсионку», а и до самого конца. Какую регулярку тогда составить?
Проблему уже сам решил.
Последний раз редактировалось programming; 02.12.2009 в 20:48..
|
|
|

03.12.2009, 18:54
|
|
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме: 840493
Репутация:
0
|
|
имеется html код
Код:
<p><h1>Заголовок</h1></p>
<p>описание</p>
<p>
нужно выдрать заголовок и описание! Делаю вот так
Код:
'</h1></p><p>(.*?)<\/p><p>';
нифига не работает! делаю в делфи
|
|
|

03.12.2009, 19:27
|
|
Познающий
Регистрация: 30.11.2009
Сообщений: 97
Провел на форуме: 333264
Репутация:
80
|
|
SultanOFF
Можешь выдирать отдельно или одной регуляркой.
По отдельности:
Код:
Заголовок - '<h1>(.*?)</h1>'
Описание - '</h1></p>\n<p>(.*?)</p>'
У тебя в регулярке для описания не хватает символа новой строки (eol).
Если одной регуляркой, то:
Код:
'<h1>(.*?)</h1></p>\n<p>(.*?)</p>'
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|