Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

HTML Parser (aka HTML source Grabber) на PHP

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> HTML Parser (aka HTML source Grabber) на PHP
Имя
Сообщение << Старые топики   Новые топики >>
HTML Parser (aka HTML source Grabber) на PHP - 2007-01-19 18:05:00.600000   
athlant64

Сообщений: 6
Оценки: 0
Присоединился: 2007-01-19 16:36:20.393333
Имеется HTML Grabber на PHP, суть работы которого такой:
Грузится страница, в ней в определённом месте я вставил этот php код, при выполнении которого тянется страница "http://www.microsoft.com/blahblah.html", ищется первое попадание определённого слова (тэга), копируется source html кода до определённого места и вставляется в мою страницу
То бишь когда пользователь грузит страницу в нее автоматом вставляется кусок страницы удалённого сайта.
Ниже приведен листинг этого HTML Граббера:

&lt;? if(!($myFile=fopen("АДРЕС_СТРАНИЦЫ_ИЗ_КОТОРОЙ_КОПИРОВАТЬ","r"))) { echo "The news interface is down for maintenance."; exit; } while(!feof($myFile)) { $myLine.=fgets($myFile,255); } fclose($myFile); $start="КУСОК_КОДА_ОТКУДА_НАЧИНАТЬ_КОПИРОВАТЬ"; $end="КУСОК_КОДА_НА_КОТОРОМ_ЗАКАНЧИВАТЬ_КОПИРОВАТЬ"; $start_position=strpos($myLine, $start); $end_position=strpos($myLine, $end)+strlen($end); $length=$end_position-$start_position; $myLine=substr($myLine, $start_position, $length); // Display HTML echo $myLine; ?&gt; Помогите доработать его! Нужно добавить перекодировку русских символов, т.е.
Доспустим моя страница имеет charset=windows-1251 а страница с которой тянется кусок HTML
имеет charset=UTF-8, в результате отграббленый текст на моей странице отображается неправильно.
И еще допустим что кусок отграббленного HTML содержит путь на картинки: /images/pic.gif
то бишь получается www.microsoft.com/images/pic.gif, а граббер тупо копирует этот путь "/images/pic.gif",
внедряет его в мою страницу и получается в результате такой путь www.mysite.com/images/pic.gif и естесственно картинки не подгружаются. Как можно исправить эти недоделки?
Post #: 1
RE: HTML Parser (aka HTML source Grabber) на PHP - 2007-01-19 19:05:31.803333   
tkvit

Сообщений: 50
Оценки: 0
Присоединился: 2007-01-07 17:48:20.876666
В php есть такая функция convert_cyr_string($string, $from, $to) надо ей обработать переменную в которой содержиться исходная строка, и все будет нормально, а насчет рисунков, то возможно это из-за того что путь указан от корня сервера попробуй убрать слэш перед images
Post #: 2
RE: HTML Parser (aka HTML source Grabber) на PHP - 2007-01-19 19:27:06.773333   
Lex_Voodoo

Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
quote:

ORIGINAL: tkvit
В php есть такая функция convert_cyr_string($string, $from, $to) надо ей обработать переменную в которой содержиться исходная строка, и все будет нормально

Чушь. Сказано же - utf8. Причём тут convert_cyr_string.
По сабжу - юзать это: http://www.php.net/manual/ru/function.iconv.php

quote:

ORIGINAL: tkvit
а насчет рисунков, то возможно это из-за того что путь указан от корня сервера попробуй убрать слэш перед images

Чушь №2. Путь указан до другого сервера. Это значит, что сайт находится на site1.ru, картинка - на site2.ru. Очевидно, надо прогонять текст через какой-нибудь preg_replace и вставлять перед каждым относительным путем 'http://site2.ru/'



Post #: 3
RE: HTML Parser (aka HTML source Grabber) на PHP - 2007-01-20 04:21:08.650000   
NullGroup

Сообщений: 3
Оценки: 0
Присоединился: 2007-01-20 03:54:16.410000
Посмотри скрипт newsgraber (!платный продукт!).
Сейчас он доступен бесплатно с полным открытым кодом на пхп.
Там и сохранение картинок и текста и создано исключение определенного текста и тэгов.

Post #: 4
RE: HTML Parser (aka HTML source Grabber) на PHP - 2007-01-22 02:23:18.743333   
xzirrow

Сообщений: 16
Оценки: 0
Присоединился: 2006-11-19 23:52:59.466666
2 athlant64 ну ты поидее правильно тему то назвал . Прийдеться тебе то что ты тянешь парсить . Насчет кодировки не спец вот насчет картинок придеться пути переправлять ну тоесть всмысле BASE тег чуть перед передачей страницы друго подправить .
Случайно не рыбку ловить собрался ?
Post #: 5
RE: HTML Parser (aka HTML source Grabber) на PHP - 2007-01-26 01:24:21.400000   
athlant64

Сообщений: 6
Оценки: 0
Присоединился: 2007-01-19 16:36:20.393333
quote:

ORIGINAL: Lex_Voodoo

1. По сабжу - юзать это: http://www.php.net/manual/ru/function.iconv.php

2. Путь указан до другого сервера. Это значит, что сайт находится на site1.ru, картинка - на site2.ru. Очевидно, надо прогонять текст через какой-нибудь preg_replace и вставлять перед каждым относительным путем 'http://site2.ru/'


2 Lex_Voodoo - Премного благодарен! Помогло! Тока пришлось не то что доделывать, а полностью делать с нуля. Получился отдельный модуль. Если кому нужно - выкладываю:

grabber.php

&lt;? if (!$addr){ $EXTERNALPAGE = importPage("http://www.site.com/index.htm");//здесь урл сайта } else { $EXTERNALPAGE = importPage($addr); } function importPage( $addr ) { // Разбор URL на имя сервера, путь и имя файла. $pattern1 = '|(http://)([^/]*)/{0,1}(.*)|'; $base = ""; if (preg_match($pattern1, $addr, $list)) { &nbsp; $server = "http://".$list[2]; &nbsp; $fullpath = $list[3]; &nbsp; $pattern11 = '|(.*)/([^/]*)$|'; &nbsp; if ( preg_match($pattern11, $fullpath, $list) ) { &nbsp;&nbsp;&nbsp; $path = $list[1]; &nbsp;&nbsp;&nbsp; $fname = $list[2]; &nbsp; } else { &nbsp;&nbsp;&nbsp; $path = ""; &nbsp;&nbsp;&nbsp; $fname = $fullpath; &nbsp; } &nbsp; if ($path) $path = "/".$path; &nbsp; $base = $server.$path; } // Загрузить документ $arr = @file($addr); if ( !$arr ) return "Page not found!"; $str = join( "", $arr ); ///* // Взять только то, что находится между тегами &lt;body&gt; и &lt;/body&gt; $pattern2 = '|&lt;body.*?&gt;(.*)&lt;/body&gt;|sei'; //Та самая функция - конвертер&nbsp;символов&nbsp;из UTF-8 в Windows-1251 if (preg_match($pattern2, $str, $list)) $str = iconv("UTF-8", "CP1251", $list[1]); // Обработка тегов &lt;img&gt;. Если атрибут src - не URL, // а локальный путь, надо заменить его на URL // соответствующего рисунка. // Различаются абсолютные пути (от корня) и относительные. $pattern3 = &nbsp; '/(&lt;img\s.*?src\s*=\s*("{0,1}))([^"&gt;]*)(\2[^&gt;]*&gt;)/sei'; //$str = preg_replace ($pattern3, '', $str);//убираем картинки $str = preg_replace($pattern3, &nbsp; "stripslashes((strpos('\\3','ttp:')&lt;=0) ". &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "?((strspn('\\3','/')&lt;=0)". &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "?'\\1$base/\\3\\4'". &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ":'\\1$server\\3\\4' )". &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ":'\\0')", &nbsp; $str); // Аналогично - обработка тегов &lt;a&gt;. $pattern4 = &nbsp; '/(&lt;a\s.*?href\s*=\s*("{0,1}))([^"&gt;]*)(\2[^&gt;]*&gt;)/sei'; $str = preg_replace($pattern4, &nbsp; "stripslashes((strpos('\\3','ttp:')&lt;=0)&amp;&amp;". &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "(strpos('\\3','ailto:')&lt;=0) &amp;&amp;". &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "(Ord('\\3')!=Ord('#')) ". &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "?((strspn('\\3','/')&lt;=0)". &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "?'\\1$base/\\3\\4'". &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ":'\\1$server\\3\\4' )". &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ":'\\0')", &nbsp; $str); return $str; } ?&gt; &lt;?= $EXTERNALPAGE?&gt;
А в тело например index.php нужно вставить следующее:
&lt;? include("grabber.php"); ?&gt;
Post #: 6
Страниц:  [1]
Все форумы >> [Веб-программинг] >> HTML Parser (aka HTML source Grabber) на PHP







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.