Помощник
|
Парсинг средствами PHP, нужна помощь |
funman
|
Сообщение
#1
|
||
|
|
||
|
|||
Webmaster_hb |
30.7.2008, 22:48;
Ответить: Webmaster_hb
Сообщение
#2
|
|
1. получаете содержимое удаленной страницы через - file_get_contents
2. используете функцию - preg_match 3. сохраняете полученные данные |
|
|
funman
|
Сообщение
#3
|
|
Полностью подтвердили мои предположения про парсинг.
пошел искать как работают эти регулярные выражения. спасибо. |
|
|
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 |
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
|
Сообщение
#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 |
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
|
Сообщение
#8
|
|
в выше преведенном коде получается что данные в одном случае сохраняются в $number[0];
[/COLOR] По идее в вашем прошлом примере данные должны были храниться в $matches[0]; - но когда я вызываю ф-цию Echo($matches[0]); не происходит вобще не чего... а когда Echo($matches[1]); выводится надпись array... [COLOR=#007700] |
|
|
Webmaster_hb |
1.8.2008, 18:44;
Ответить: Webmaster_hb
Сообщение
#9
|
|
для вывода массивов пользуйтесь
print_r($matches) |
|
|
funman
|
Сообщение
#10
|
|
|
|
|
|
Похожие темы
Тема | Ответов | Автор | Просмотров | Последний ответ | |
---|---|---|---|---|---|
Нужна програмка постинга в свои сайты | 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 |
Текстовая версия | Сейчас: 25.4.2024, 10:41 |