HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > PHP
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #1  
Старый 01.12.2009, 18:56
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() в нужных местах.
 
Ответить с цитированием

  #2  
Старый 30.11.2009, 23:34
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+)/">
Дальше уже ищешь полное описание и записываешь, допустим, для каждой страны в свой файл.
 
Ответить с цитированием

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

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

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

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

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

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

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

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

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

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

Репутация: 818


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

Как я заметил на всех страницах стиль оформления один, кинь мне несколько УРЛов где оформления разные, позже гляну.
 
Ответить с цитированием

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

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

http://www.ozon.travel/countries/590/
http://www.ozon.travel/countries/605/
 
Ответить с цитированием

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

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

В общем не могу придумать что делать с выдиранием описания..
А что если вырвать полное описание, а не первые абзацы? Например, на http://www.ozon.travel/countries/1032/ с Чем заняться путешественнику в Венгрии? Подлечиться-оздоровиться на термальных курортах, оценить далеко не бедную местную историческую «экскурсионку», а и до самого конца. Какую регулярку тогда составить?

Проблему уже сам решил.

Последний раз редактировалось programming; 02.12.2009 в 20:48..
 
Ответить с цитированием

  #9  
Старый 03.12.2009, 18:54
SultanOFF
Участник форума
Регистрация: 04.06.2009
Сообщений: 176
Провел на форуме:
840493

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

имеется html код
Код:
<p><h1>Заголовок</h1></p>
<p>описание</p>
<p>
нужно выдрать заголовок и описание! Делаю вот так
Код:
'</h1></p><p>(.*?)<\/p><p>';
нифига не работает! делаю в делфи
 
Ответить с цитированием

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

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

SultanOFF
Можешь выдирать отдельно или одной регуляркой.

По отдельности:
Код:
Заголовок - '<h1>(.*?)</h1>'
Описание - '</h1></p>\n<p>(.*?)</p>'
У тебя в регулярке для описания не хватает символа новой строки (eol).
Если одной регуляркой, то:
Код:
'<h1>(.*?)</h1></p>\n<p>(.*?)</p>'
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Delphi]/[Pascal] Задай вопрос, получи ответ Isis С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby 6762 17.06.2010 21:23
Всё о беспороводном соединении на кпк и смартфонах! Задай вопрос - получи ответ! ARMENIN Беспроводные технологии/Wi-Fi/Wardriving 2 02.11.2008 00:40



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


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




ANTICHAT.XYZ