не сложный парсер, помогите сделать

 
Sometime CMS Community
Посетитель
no avatar
Медаль
Сообщений: 304
Задача проста:

указываешь ему html файл (+ картинки) он его загружает и находит в нем заголовки Н1 Н2 и под. и разбивает загруженный html - каждый заголовок - НОВАЯ статья. Все предельно просто (типа граббера в универсальном каталоге)

Открыл граббер - указал ему html документ - граббер его загрузил - нашел заголовки - и от каждого заголовка до следующего - весь контент поместил в новую статью
Все статьи сложил в одну (указанную) рубрику
Sometime CMS Community
Посетитель
no avatar
Медаль
Сообщений: 428
пример страницы которую собираешься парсить!
Реклама
cms
Sometime CMS Community
Посетитель
no avatar
Медаль
Сообщений: 304
maxisoft:

пример страницы которую собираешься парсить!

Да вот такая например

Тут главное что? Главное - Указываешь файл (его можно прямо на фтп билайфовский класть вместе с картинками) и скрипт, везде где h1 - делает новую статью - фактически - берет и от Н1 до Н1 (следующего) делает новую статью. Все очень просто
Sometime CMS Community
Посетитель
no avatar
Медаль
Сообщений: 304
Есть какие-нибудь идеи по теме?
Sometime CMS Community
Посетитель
no avatar
Медаль
Сообщений: 428
ммм вот данном файле признаюсь честно не могу ничего придумать а больше привык парсить html по DOM схемам если бы текст был обрамлен каким нибудь дивом с классом было бы проще.
Посетитель
small user social cms
МедальПочетный донор проектаАвторитет форумаКубок зрительских симпатийПочетный донор проекта
Сообщений: 2572
пхп тока учу и пусть мой код назовут г...кодом но вот это
Код PHP:
  1.  
  2. if (preg_match('|<h1>(.*)<h1>|sei', $a, $oven)) $oven = "<h1>".$oven[1];
  3. print $oven;
  4.  
$a ваш текст.
выводит первое включение текста от <h1> до след <h1>
добавить цикл и еще прегматч от <h1> до </h1>
Виджеты, поля и компоненты для instantcms 2 http://www.zau4man.ru/
Посетитель
small user social cms
Медаль
Сообщений: 176
Недавно мне кто то дал раскодированный зеноновский скрипт парсера новостей, который вроде как раз делает то, что выхотите. Но в коде есть ошибки типа ляпы автомата раскодировочного, спец по ПХП я думаю их увидит без проблем. Если кто подправит код - выложите, будем пользоваться все.

Код PHP:
  1.  
  2. <?php
  3.  
  4.  
  5. function fw_rbc( $content, $file )
  6. {
  7. $tm = fopen( $file, "w" );
  8. if ( $tm )
  9. {
  10. set_file_buffer( $tm, 0 );
  11. flock( $tm, LOCK_EX );
  12. fwrite( $tm, $content );
  13. flock( $tm, LOCK_UN );
  14. fclose( $tm );
  15. }
  16. }
  17.  
  18. function root_href_rbc( )
  19. {
  20. if ( dirname( $_SERVER['SCRIPT_NAME'] ) == "/" || dirname( $_SERVER['SCRIPT_NAME'] ) == "\\" )
  21. {
  22. return "/";
  23. }
  24. return dirname( $_SERVER['SCRIPT_NAME'] )."/";
  25. }
  26.  
  27. function gethost_rbc( $url )
  28. {
  29. $tmp = parse_url( $url );
  30. if ( isset( $tmp['host'] ) )
  31. {
  32. return $tmp['host'];
  33. }
  34. return "";
  35. }
  36.  
  37. error_reporting( E_ALL & ~E_NOTICE );
  38. include_once( "rbc_set.php" );
  39. $site = "http://top.rbc.ru/";
  40. $emu = true;
  41. $emu = false;
  42. $host = "http://".$_SERVER['HTTP_HOST'].root_href_rbc( );
  43. $domain = gethost_rbc( $site );
  44. $url = $emu ? "http://local.ru/".$domain."/" : $site;
  45. $rvbest_label = "<div style=\"display:none;\">000000</a></div>";
  46. $spon = "<br><br><center>Источник информации: <a href=".$url.( " target=_blank>".$url."</a></center>" );
  47. echo "$url,--,$domain";
  48. $data = date( "dmY" );
  49. if ( file_exists( $ft ) )
  50. {
  51. $filemod = filemtime( $ft );
  52. $filemodtime = date( "dmY", $filemod );
  53. }
  54. else
  55. {
  56. $fd = file_get_contents( $url );
  57. fw_rbc( $fd, $ft );
  58. }
  59. if ( $data != $filemodtime )
  60. {
  61. $fd = file_get_contents( $url );
  62. if ( $fd )
  63. {
  64. fw_rbc( $fd, $ft );
  65. }
  66. }
  67. if ( 0 < filesize( $ft ) )
  68. {
  69. $fd = fopen( $ft, "r" );
  70. $content = fread( $fd, filesize( $ft ) );
  71. fclose( $fd );
  72. }
  73. else
  74. {
  75. $fd = file_get_contents( $url );
  76. if ( $fd )
  77. {
  78. fw_rbc( $fd, $ft );
  79. }
  80. }
  81. if ( $content )
  82. {
  83. $start = strpos( $content, "<!-- CONTENT -->" );
  84. $finish = strpos( $content, "<!-- END OF CONTENT -->" );
  85. $length = $finish - $start;
  86. $code = substr( $content, $start, $length );
  87.  
  88.  
  89. }
  90. $search = array( "'<\\/div>'", "'<p>'", "'<\\/p>'" );
  91. $replace = array( "", "", "" );
  92. $code = preg_replace( $search, $replace, $code );
  93.  
  94.  
  95. $cn = 0;
  96. $text = "";
  97. $pattern = "/class=\"black\">(.*)<\\/a>.*class=\"pic\"><\\/a>(.*)<b>(.*)далее(.*)/Usi";
  98.  
  99. preg_match_all( $pattern, $code, $n );
  100.  
  101. unset( $n[0] );
  102. $i = 0;
  103. for ( $i = 0; $i < count( $n[1] ); ++$i )
  104. {
  105. if ( isset( $n[1][$cn], $n[2], $n[3] ) )
  106. {
  107. $mes_url = array( $n[1][$cn], $n[2][$cn], $n[3][$cn] );
  108. $content = array( $n[1][$cn], $n[2][$cn], $n[3][$cn] );
  109. $subj = array( $n[1][$cn], $n[2][$cn], $n[3][$cn] );
  110. array( $n[1][$cn], $n[2][$cn], $n[3][$cn] );
  111. $text .= "<p><b>".$mes_url.$subj."</a></b><br>".$content."</p>";
  112. }
  113. ++$cn;
  114. }
  115.  
  116.  
  117.  
  118. ?>
  119.  
  120.  
код второго файла
Код PHP:
  1.  
  2. <?php
  3.  
  4. # Заголовок страницы с выводимой информацией
  5. $main_title="<br><font color='#0000FF'><h2>Новости с сайта rbc.ru</h2></font>";
  6.  
  7. # Имя файла для кэширования новости (создаётся автоматически)
  8. $ft="rbc.txt";
  9.  
  10. ?>
  11.  
Редактировалось: 1 раз (Последний: 30 января 2010 в 22:36)
Sometime CMS Community
Посетитель
no avatar
Медаль
Сообщений: 304
maxisoft:

ммм вот данном файле признаюсь честно не могу ничего придумать а больше привык парсить html по DOM схемам если бы текст был обрамлен каким нибудь дивом с классом было бы проще.

Да можно хоть бантиком украсить - можно хоть дивом обромлять, хоть как - как скажете - так и будет - я текст буду подгонять - у меня основная сложность - из текста с картинками создавать статьи - а если это будет автоматом - а мне останется подкорректировать чуть чуть - это будет КРАСОТА!
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1847
Тема конечно не нова, но все же ...

Код PHP:
  1. $page=file_get_contents($url);
  2. preg_match("!<title>(.*?)<\/title>!is", $page, $tmp);
  3. $title = htmlspecialchars($tmp[1]);
выводит title сайтов, но не всех ... (instant.cms не выводит, другие выводит - через раз)

Код PHP:
  1. <?
  2. function browser($url) {
  3. $url=$_GET['page'];
  4. $ch = curl_init($url);
  5. curl_setopt($ch, CURLOPT_URL,$url);
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  7. curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)");
  8. $html = curl_exec($ch);
  9. return $html;
  10. }
  11. $base = preg_match_all("~<title>(.*?)<\/title>~is", browser($url), $text);
  12. $base=implode('<br />', array_slice($text[1], 0, 1));
  13. print mb_convert_encoding($base, "UTF-8", "UTF-8, cp1251");
  14. ?>
выводит title у большего числа сайтов, но и ошибок больше

Как же все таки лучше правильно сделать запрос на удаленный сайт, чтобы получить title?
Дополнения для InstantCMS
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.