PHP: Извличане текст от интернет страница

Един примерен скрипт за извличане на текстово съдържание от интернет страница.
Ползва функцията get_page_content($url), която извлича цялото съдържание на страница - пълния HTML документ. Тази функция ползва CURL библиотеката. Ако в инсталацията на PHP няма разширението CURL, скрипта ще даде грешка. Повечето хостинги имат по подразбиране CURL. Така, че това не би трябвало да е проблем. Препоръчвам използването на тази функция вместо вградените в PHP средства, защото може да се задава време за изчакване, както за свързване, така и за цялостна обработка. Ако това време изтече скрипта продължава работа без да дава грешка. По подразбиране съм задал 10 сек за свързване и 20 за извличане на страницата. Ако се очаква страниците да бъдат много дълги може времето да се увеличи от 20 на 30 сек.

$url = 'https://ganbox.com/news'; # адрес на страницата, която ще се извлича

$html = get_page_content($url);

$html = preg_replace('|^(.*?)<body|si','<body',$html); #="" всичко="" пред="" отварящ="" таг="" body="" се="" изтрива="" (ако="" има="" таг)="" $html="preg_replace('|</body">(.*)$|si','',$html); # всичко след затварящ таг body се изтрива (ако има таг)
$aBlockTags = array('form','noscript','script','style','object');
foreach($aBlockTags as $blockTag){
$html = preg_replace('|&lt;'.$blockTag.'(.*?)<!--'.$blockTag.'-->|si','',$html); # изчистване на някои блокови тагове, между които не се очаква да има текст
}
#$aSpecialDivs = array('header','head','top','menu','menuBar','footer','foot');
$text = strip_tags($html); # премахва тагове
$text = html_entity_decode($text); # превръща HTML спец. символи в съответните знаци. Напр. &lt; става &lt; и " става " print $text; exit; /** * Извличане на съдържанието на уеб страница * @param string $url - адрес на уеб страница, от която се извлича текст * @param int $CURLOPT_CONNECTTIMEOUT optional - максимално изчакване за свързване в сек. * @param int $CURLOPT_TIMEOUT optional - време за цялостна обработка в сек. * @return string - целият HTML документ на страницата **/ function get_page_content($url, $CURLOPT_CONNECTTIMEOUT=10, $CURLOPT_TIMEOUT=20){ $ch = curl_init (); @curl_setopt($ch, CURLOPT_URL, $url); @curl_setopt($ch, CURLOPT_HEADER, false); /* без HTTP headers */ @curl_setopt ( $ch, CURLOPT_CONNECTTIMEOUT, $CURLOPT_CONNECTTIMEOUT ); /* време за свързване */ @curl_setopt ( $ch, CURLOPT_TIMEOUT, $CURLOPT_TIMEOUT ); /* общо време за изпълнение */ @curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true ); @curl_setopt ( $ch, CURLOPT_FOLLOWLOCATION, true ); @curl_setopt ( $ch, CURLOPT_USERAGENT, $_SERVER ['HTTP_USER_AGENT'] ); $data = curl_exec ( $ch ); curl_close($ch); return $data; } 

В сегашния си вид скрипта извлича всички текстове между body таговете, като премахва CSS, JavaScript и някои блокови тагове заедно с кода между тях. Текстовете от хедъра, футъра и менюто остават. След като извлече текста този скрипт просто го отпечатва на екрана, но ти можеш да направиш и други неща с него. Все пак добре помисли какво ще правиш с него! Възможно е текста да е защитен от Закон за авторското право и сродните му права и да нямаш право да го публикуваш без разрешението на автора.
Напомням ти още веднъж, че ако вземаш текст от друг сайт и го показваш в твои сайт е задължително да поставиш реален линк към източника. В противен случай е много вероятно да получиш наказание от Гугъл за дублирано съдържание и сайта ти да падне назад в резултатите на Гугъл.
Кодът е тестван и работи. За всякакви идеи за подобрение и забележки, пиши коментари по публикацията.
.
.
Подобна статия: PHP парсване на XML новини за твоя сайт

Прочетена:27164
1 - лоша2 - слаба3 - средна4 - добра5 - отлична (1 гласа, оценка: 5,00 от 5. Моля изберете оценка!)
Loading...
Георги Стефанов
Магистър по информатика, който се занимава с компютри от 1988 г., професионално с програмиране от 1998 г., а с уеб технологии от 2002 г. Има богат опит при оптимизиране на бизнес сайтове. Повече от 12 години развива успешно свои уеб проекти и работи с български и международни компании за постоянно подобряване на техните сайтове и увеличаване на онлайн продажбите. 

2 comments on “PHP: Извличане текст от интернет страница”

  1. Имам следния проблем. Опитвам се да извлеча няколко адреса от iptv.bg
    използвам следната функция:
    $url = 'http://iptv.bg/watch.php?save=1&password=pass&login=user';
    $content = file_get_contents($url);

    При подаване директно на адреса с потребителското име и парола в броузера влизам без проблем , но когато използвам функцията file_get_contents , не мога да се регистрирам не ми подава потребитеслкото име и парола и оставам на страницата за въвеждането им. Да не би тази функция да има ограничение в броя на подаваните урл параметри. Благодаря ви предварително!

  2. Първото което се сещам е, че ако потребителското име или парола съдържат специални символи ще трябва преди реда с file_get_contents() да направиш $url=urlencode($url);
    Друга вероятна причина е логването през GET да води до създаване на бисквитки в сесията, нещо с което file_get_contents() не може да се справи автоматично, а трябва да се ползва:
    $opts = array('http' => array('header'=> 'Cookie: ' . $_SERVER['HTTP_COOKIE']."\r\n"));
    $context = stream_context_create($opts);
    $contents = file_get_contents($url, false, $context);
    Ф-я stream_context_create() съществува от версия PHP 4.3.0, ако ползваш по-стара версия се ползва друг метод.

споделиха
linkedin facebook pinterest youtube rss twitter instagram facebook-blank rss-blank linkedin-blank pinterest youtube twitter instagram