За последние 24 часа нас посетили 23742 программиста и 1549 роботов. Сейчас ищут 1033 программиста ...

Не получается простой парсинг. применительно к wiki

Тема в разделе "PHP для новичков", создана пользователем Dima4321, 13 янв 2011.

  1. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Получаю содержимое страницы в виде массива:

    file1.php

    PHP:
    1. <?php
    2. ini_set('display_errors',1);
    3.  
    4. $str=file('http://en.wikipedia.org/wiki/ABBA');
    5. print_r($str);
    6.  
    7. ?>
    file2.php

    Хочу получить то что находится между 186 и 187 а именно текст:

    =>

    ABBA was a Swedish pop music group formed in Stockholm in 1972, consisting of Anni-Frid "Frida" Lyngstad, Björn Ulvaeus, Benny Andersson and Agnetha Fältskog. They became one of the most commercially successful acts in the history of popular music, topping the charts worldwide from 1972 to 1982.

    PHP:
    1. <?php
    2. ini_set('display_errors',1);
    3.  
    4.  
    5.  
    6. $str=file_get_contents('http://мойсайт/file1.php');
    7.  
    8.  
    9.  
    10. $poisk='/\[186\](.+)\[187\]/si';
    11. preg_match($poisk,$str,$new);
    12. print_r($new);
    13.  
    14. ?>
    Но массив приходит пустой.

    Что не так ?

    Локали??
    не правильная решулярка
    Возможно нужно применять сокеты ??
    Или выставить как-то больше временни на обработку скрипта ??

    Помогите не понимаю... Задача то простая.
     
  2. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    В переменной $str - массив, а не строка
    Можешь написать:
    PHP:
    1. <?php
    2. ini_set('display_errors', 1);
    3. $str = file('http://en.wikipedia.org/wiki/ABBA');
    4. echo($str[186]);
    5. ?>
     
  3. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Спасибо sobachnik Дружище !! Продолажя тему детского парсера ))):

    PHP:
    1. <?php
    2.  ini_set('display_errors', 1);
    3.  error_reporting(E_ALL);
    4.  $str = file('http://en.wikipedia.org/wiki/ABBA');
    5.  $new=strip_tags($str[186]);
    6.  $newtext = wordwrap($new, 50, "<br />\n");
    7.  echo $newtext;
    8.  ?>
     
  4. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    И завтра, когда на википедии сменят баннер или добавят какой-нибудь тэг, пункт меню или ещё какую плюшку - вы будете переписывать свой детский парсер. А потом снова. И снова.
     
  5. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    В данном случае я сразу занесу данные в базу MySql т.е. парсинг будет не в реальном времени а копирайтом.

    Просто с помощью этой штуки проще создавать свои страницы.
     
  6. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    Copy&Paste через обычный блокнот гораздо легче, чем писать скрипт, проверять с какой строчки по какую нужно собрать HTML, чистить его и т.д.
     
  7. Dima4321

    Dima4321 Активный пользователь

    С нами с:
    1 апр 2009
    Сообщения:
    683
    Симпатии:
    0
    Не скажи ...

    естественно я усложню скритп. вот например мысль дальше

    PHP:
    1. <?php
    2.  ini_set('display_errors', 1);
    3.  error_reporting(E_ALL);
    4.  $str = file('http://en.wikipedia.org/wiki/ABBA');
    5.  $new=strip_tags($str[186]);
    6.  $newtext = wordwrap($new, 50, "<br />\n");
    7.  echo $newtext;
    8.  
    9.  $new2=strip_tags($str[187]);
    10.  $new3=preg_replace('/\[\d{1,4}\]/siU',"",$new2);
    11.  echo '<br><br><br>';
    12.  echo $new3;
    13.  echo '<br>';
    14.  echo $str[188];
    15.  ?>
    также сами массвы $str[] я сделаю в виде $_POST типа:

    $str[S_POST] где скрипту буду просто передавать индексы нужного текста с проверками if который сам и соберет конечную страничку.

    Мои действия:

    вбить в формы только индексы массивов соот-во предварительно оценив нужный текст, что выбрать
     
  8. vah-smile

    vah-smile Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    162
    Симпатии:
    1
    Адрес:
    Украина, Ровно
    Все выше написано - понятно! А что делать, если для парсинга даных нам нужно сначала залогинится на сайте?
     
  9. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    vah-smile
    curl
     
  10. vah-smile

    vah-smile Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    162
    Симпатии:
    1
    Адрес:
    Украина, Ровно
    Нашол вот такую документацию по CURL (http://www.php.ru/manual/ref.curl.html), но ничего интересного для себя не взял! Можно ли поподробнее написать (как для чайника)? :oops:
     
  11. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    vah-smile
    нужно как бы сэмулировать браузер - т.е. возможность работать с куками.
    отослать логин/пароль для авторизации методом POST, получить куки с айди сессии,
    и затем в дальнейших запросах устанавливать в куки этот айди.
    что-то типа такого. точнее сказать не смогу
     
  12. vah-smile

    vah-smile Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    162
    Симпатии:
    1
    Адрес:
    Украина, Ровно
    А как подключить CURL на Denwer? И как понять, поддерживает ли мой хостинг CURL или нет?
     
  13. Gromo

    Gromo Активный пользователь

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    хз

    phpinfo();
     
  14. vah-smile

    vah-smile Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    162
    Симпатии:
    1
    Адрес:
    Украина, Ровно
    Вот нашел инфу по установки CURL на Denwer: http://parsing-and-i.blogspot.com/2009/09/curl-denwer.html

    На сайте http://www.phpclub.ru/detail/article/curl#part_5 есть пример использования CURL + авторизация, но почемуто аутентыфикация не происходит (или происходит, но я не понимаю как)!

    PHP:
    1. <?php
    2. // HTTP authentication
    3. $url = "http://www.example.com/protected/";
    4. $ch = curl_init();    
    5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  
    6. curl_setopt($ch, CURLOPT_URL, $url);  
    7. curl_setopt($ch, CURLOPT_USERPWD, "myusername:mypassword");  
    8. $result = curl_exec($ch);  
    9. curl_close($ch);  
    10. echo $result;
    11. ?>
     
  15. miako

    miako Активный пользователь

    С нами с:
    21 сен 2008
    Сообщения:
    14
    Симпатии:
    0
    Что, действительно example.com?
     
  16. vah-smile

    vah-smile Активный пользователь

    С нами с:
    13 апр 2009
    Сообщения:
    162
    Симпатии:
    1
    Адрес:
    Украина, Ровно
    Нет! Я собираюсь парсить совсем другой сайт! example.com - был приведен в качестве примера на http://www.phpclub.ru/detail/article/curl#part_5 :D
     
  17. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Попробуй спарсить советскую энциклопедию