X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Парсинг средствами PHP, нужна помощь
funman
funman
Topic Starter сообщение 30.7.2008, 22:45; Ответить: funman
Сообщение #1


Добрый день!

Требуется средствами PHP c другова сервера выдергивать нужные строчки кода и сохранять их отдельные файлы на радном сервере.

Требуемые строчки кода будут отделенны отдельными тегами типо
<-- start --> требуемый текст <-- finish -->

я так понимаю мне нужно загрузить URL в массив, и потом перебрать его построчно? тоесть как я нахожу строку <-- start --> начинаю сохранять строки, как нахожу <-- finish --> то все сохраняю файл и все...

По идее все просто , но долгие поиски в гуглах по поводу парсинга не дали определенного результата (скорее больше запутали)

Я как понял можно использовать или стандартные функции по работе со строками или как многие советуют это использовать "Регулярные выражения"

Но вот если использовать регулярные выражения то алгоритм будет выглядеть не так как я описал выше??

Кто нибудь может привести конкретный пример кода? для выше описанного примера с - "<-- start --> требуемый текст <-- finish -->"
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 30.7.2008, 22:48; Ответить: Webmaster_hb
Сообщение #2


1. получаете содержимое удаленной страницы через - file_get_contents
2. используете функцию - preg_match
3. сохраняете полученные данные
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
funman
funman
Topic Starter сообщение 31.7.2008, 9:16; Ответить: funman
Сообщение #3


Полностью подтвердили мои предположения про парсинг.

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

спасибо.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
funman
funman
Topic Starter сообщение 1.8.2008, 13:08; Ответить: funman
Сообщение #4


Помогите разобраться с preg_match. второй день читаю всякую информацию про регулярные выражения, но пока вобще не получается ничего.

Нашел выражения (маску) из примера которая должны из кода выцеплять ссылки ...

Нашел прогу The Regex Coach, которая проверяет регулярные выражения, вроде все правильно...

Только я не все равно не понимаю почему не работает у меня, как мне полученные данные вывести ?

Я так понимаю они должны сохраняться в $mat ? $mat будет массивом, скольки мерным? как правильно с ним работать ? от чего это вобще зависит ?

Помогите разобраться!


$data = file_get_contents("[URL="http://www.yandex.ru/"]http://www.yandex.ru[/URL]");
preg_match_all("/<a.* href=(.*)>(.*)</a>/", $data, $mat);
echo($mat[0]);


P.s. пробовал всякие варианты, не чего хорошего не получалось получить, максимум на экране появлялось слово "array"
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 1.8.2008, 16:19; Ответить: Webmaster_hb
Сообщение #5


funman, к сожалению нет времени расписывать т.к. сегодня уезжаю
вот прилагаю кусок кода который в яндексе вырезает один кусок, думаю будет более-менее понятно
[php]
$data = file_get_contents($search_url);
$pattern = '/(?<=tabindex=\")(\d*)\"(.)*'.$url.'(.)*(?=<\/a>)/';
preg_match_all($pattern, $data, $matches);
[/php]
результыты операции в массиве $matches
в первых скобка после символов ?<= идет то что должно быть до искомого
в последних скобках после символов ?= то что должно быть после искомого
в вашем случае можете туда вставить теги html
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
funman
funman
Topic Starter сообщение 1.8.2008, 17:50; Ответить: funman
Сообщение #6


<?
$data = file_get_contents("http://yandex.ru/yandsearch?text=%E0%E2%E8...%E2%EE%E7%EA%E8");
$pattern = '/(?<=tabindex=\")(\d*)\"(.)*(.)*(?=<\/a>)/';
preg_match_all($pattern, $data, $matches);
echo ($matches[1]);
?>

Оставил ваш код практически без изменений. после выполнения на экране появляется надпись "array" и все... если поставить $matches[0] или какие то другие варианты то вобще не чего не выводит ((

дайте хоть один полный кусочек кода который чтото обрабатывает и куда нибудь чтото выводит. ((
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 1.8.2008, 18:00; Ответить: Webmaster_hb
Сообщение #7


вот модуль который проверяет номер позиции сайта в поисковой системе open.by
внешняя часть этого скрипта доступна здесь - http://html.by/pos/
[php]
<?php

if ($search_quantity <= 10) $num = 0;
elseif ($search_quantity <= 20) $num = 1;
elseif ($search_quantity <= 30) $num = 2;
elseif ($search_quantity <= 50) $num = 3;
elseif ($search_quantity > 50) $num = 4;





for ($i=0;;$i++)
{

$content = file_get_contents( "http://all.by/cgi-bin/search.cgi?query=$queryUrl&num=$num&page=". ($i + 1) );
$content = strtolower($content);
$viewedPages++;
$loadSize = $loadSize + strlen($content);
$number = '';





if ( ! preg_match_all("'(?<=<li value=\')[0-9]*(?=\'>)'",$content,$number) ) break;
if ( ! preg_match_all("'(?<=<span class=\'url\'>).+(?=<\/span>)'",$content,$url) ) break;
$number = $number[0];
$url = $url[0];





if (count($number) != count($url)) break;





$break = 0;
for ($t=0;$t<count($number);$t++)
{
$url[$t] = preg_replace("'<[^<>]*>| '", '', $url[$t]);
$url[$t] = preg_replace("'(?<!.)http://'", '', $url[$t]);
$url[$t] = preg_replace("'(?<!.)www\.'", '', $url[$t]);
$url[$t] = preg_replace("'([a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,4}).*'", '\\1', $url[$t]);

if ( $url[$t] == $site )
{
$result[count($result)-1] = $number[$t];
$break = 1;
break;
}

if ($number[$t] == $search_quantity)
{
$break = 1;
}

}





if( $break == 1) break;

}

?>
[/php]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
funman
funman
Topic Starter сообщение 1.8.2008, 18:31; Ответить: funman
Сообщение #8


в выше преведенном коде получается что данные в одном случае сохраняются в $number[0];
[/COLOR]
По идее в вашем прошлом примере данные должны были храниться в $matches[0]; - но когда я вызываю ф-цию Echo($matches[0]);
не происходит вобще не чего... а когда Echo($matches[1]); выводится надпись array...

[COLOR=#007700]
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Webmaster_hb
Webmaster_hb
сообщение 1.8.2008, 18:44; Ответить: Webmaster_hb
Сообщение #9


для вывода массивов пользуйтесь
print_r($matches)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
funman
funman
Topic Starter сообщение 1.8.2008, 19:05; Ответить: funman
Сообщение #10


(Webmaster_hb @ 1.8.2008, 21:44) *
для вывода массивов пользуйтесь
print_r($matches)


тоже нашел эту функцию уже, повился первый результат :)

вопрос , а при сохранении в текстовый файл не нужно будет использовать спец ф-ции?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Нужна програмка постинга в свои сайты
0 kasey7 346 22.4.2024, 19:54
автор: kasey7
Открытая тема (нет новых ответов) Требуется помощь по сайту на "ВордПресс"
Закрылся доступ в панель администратора
15 Tia2 2391 17.4.2024, 0:54
автор: diviner99
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыТрафик в Телеграм (рассылка, инвайт, парсинг)
9 gelt 2858 8.4.2024, 15:28
автор: gelt
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыСостояние после ампутации - нужна помощь
благотворительный топик
49 vitvirtual 5899 1.4.2024, 5:23
автор: vitvirtual
Открытая тема (нет новых ответов) Нужна ли плоская структура категорий в ИМ?
1 noviktamw 1187 26.3.2024, 21:50
автор: c4p1t4l15t


 



RSS Текстовая версия Сейчас: 25.4.2024, 10:41
Дизайн