спарсить данные с сайта в переменные

Тема в разделе "PHP", создана пользователем sunyang, 16 май 2011.

Модераторы: latteo
  1. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    Есть файл со ссылками на один и тот же сайт с продукцией.
    Мне нужно спарсить заголовок, картинки и параметры товара, записать их чтоль в переменные и в базу своего сайта.

    Подскажите, как можно спарсить инфу вот с этого сайта
    http://asia-fashion-wholesale.com/welcome/index.php/fashion/p_16642.html

    Спасибо)
     
  2. SkiLLer

    SkiLLer

    Регистр.:
    22 авг 2007
    Сообщения:
    307
    Симпатии:
    64
    обычно, для простого парсинга хватает cURL и регулярных выражений.
     
  3. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    PHP:
    $html file_get_contents('http://asia-fashion-wholesale.com/welcome/index.php/fashion/p_16642.html');
    $title preg_replace('#^(.*)<title>(.+)</title>(.*)#is''$2'$html);
    echo 
    $title;
    дальше ясно?)
     
    sunyang нравится это.
  4. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    немного не понятно, что делает функция preg_replace(), а точнее выражение в скобках '#^(.*)<title>(.+)</title>(.*)#is', '$2', $html
     
  5. _sokal_

    _sokal_

    Регистр.:
    25 дек 2009
    Сообщения:
    300
    Симпатии:
    139
    у меня похожая задача.
    страница с постоянно повторяющимися тегами.
    вырезаем между ними текст,загоняем в переменную.
    как дальше разобрать эту переменную на 2 переменые,зная шаблон по какому там всё записанно.
    и как сделать цикл,что бы предыдущий вырезаный текс не учитывался при следующем круге.
     
  6. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    заменяет все что в $html на то что между <title></title>
    PHP:
    preg_match('/<title>(.*?)<\/title>/is',$content,$match);
    $title $match[1];

    preg_match('/<strong>Product Information<\/strong>(.*?)<strong>Product Code:<\/strong>/is',$content,$match);
    $descr $match[1];

    preg_match_all('/\"(\/welcome\/images\/uploads\/\d{2,}.*?)\"/is',$content,$match);
    $img1 $match[1][0];
    .....
    тут наверное все понятно :)
     
  7. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    ок) давай разберем

    1. # = ограничители паттерна
    2. is = модификаторы.
    2.1 i = case insensitive = все равно какой регистр
    2.2 s = работа в однострочном режиме (т.е. режутся каретки)
    3 ^ = начало строки, а точнее позиция перед началом строки
    4 = (.*) = любые символы в любом количестве, кстати говоря, лучше сделать (.*?). подробнее читай в "жадность квантификаторов"
    5 <title>(.+)</title> = символы внутри тэга
    6 (.*) в конце = остальной код (не проверял, но имхо можно тут не писать)
    7 $2 - второй карман замены

    в данном случае в первом кармане все до тэга, во втором - содержимое тэга, в третьем - остальной код после тэга

    надеюсь понятно написал :)

    п.с. я на твоем месте почитал бы про регулярные выражения. они очень полезны в программировании. я бы сказал, что без них - никуда :)
     
    sunyang нравится это.
  8. Mark666

    Mark666 Писатель

    Регистр.:
    3 окт 2007
    Сообщения:
    6
    Симпатии:
    2
    можно поступить проще - поставить квантификатор U
     
  9. Miraage

    Miraage Angular/Laravel

    Регистр.:
    3 июн 2008
    Сообщения:
    230
    Симпатии:
    51
    а если мне в одном случае надо убрать жадность, а в другом нет?)
     
  10. sunyang

    sunyang

    Регистр.:
    25 апр 2009
    Сообщения:
    444
    Симпатии:
    30
    Спасибо огромное. разобрался! можно ссылочку на почитать про регулярные выпажения?