Yvision.kz
kk
Разное
Разное
399 773 постов41 подписчиков
Всяко-разно
0
04:59, 08 октября 2010

DOMXpath как продвинутый парсер или Мой "експеримент"

Вдохновившись идеей пользователя Blog post imagexapon реализовал такое же "облако" ключевых слов на сайтах, зарегистрированных в каталоге iNternets.kz

Отличия как в идеологии (данные берутся только для зарегистрированных сайтов, в оригинале же авторы сами добавляют сайты; я показываю только ключевики, занимающие больше 10% от общей массы и не показываю URL'ы сайтов, на которых они встречаются), так и в технике (я не возился два дня с парсером, а воспользовался простой и удобной связкой DOMDocument+DOMXpath).

Вот код моего парсера, чтобы все поняли, как это просто :)


<?php

$content = file_get_contents($row['url']);
if(
$content) {
// Get charset
$charset = mb_detect_encoding($content, "utf-8, windows-1251, koi8-r, koi8-u");
if(!
$charset) {
$dom = new DOMDocument();
$dom->loadHTML(strtolower($content));
$xpath = new DOMXpath($dom);
$body = $xpath->query("//meta[@http-equiv='content-type']/@content");
if(
$body->length > 0) {
list(
$type, $charset) = explode("charset=", $body->item(0)->nodeValue);
$charset = trim($charset);
}
if(empty(
$charset)) {
$charset = "windows-1251";
}
}

// Get keywords
if(strcasecmp($charset, "UTF-8") != 0) {
$content = iconv($charset, "UTF-8", $content);
}
$content = mb_convert_encoding($content, 'HTML-ENTITIES', "UTF-8");
$dom = new DOMDocument();
$dom->loadHTML(mb_strtolower($content, "utf-8"));
$xpath = new DOMXpath($dom);
$body = $xpath->query("//meta[@name='keywords']/@content");
$keywords_str = "";
if(
$body->length > 0) {
$keywords_str = $body->item($i)->nodeValue;
}

if(!empty($keywords_str)) {
$keywords = explode(",", $keywords_str);
if(
count($keywords) == 1) {
$keywords = explode(" ", $keywords_str);
}
}
}
?>

0
638
5