从html中提取基本信息?

时间:2011-04-24 05:48:33

标签: html parsing extraction information-extraction

我有一个项目,用户提交许多指向外部网站的链接,我需要解析这些提交链接的HTML并从页面中提取基本信息,就像Digg和Facebook提交链接时一样。

我想要检索:

  1. 主标题或标题(可以在标题中,h1h2p等...)
  2. 简介或说明文字(可能在divp等...)
  3. 主要图片
  4. 我的主要问题是,这里似乎有太多的选择可供探索,而且我有点困惑,至少可以坐下来。到目前为止,我看到的许多解决方案似乎都是不充分的或者是过度杀伤。

1 个答案:

答案 0 :(得分:2)

您可以选择服务器端语言来执行此操作。

例如,使用PHP,您可以将get_meta_tags()用于元标记...

$meta = get_meta_tags('http://google.com');

你可以使用DOMDocument获取title元素(如果需要title元素,有些人可能会争辩,你也可以使用DOMDocument来获取元标记)。

$dom = new DOMDocument;

$dom->loadHTML('http://google.com');

$title = $dom
           ->getElementsByTagName('head')
           ->item(0)
           ->getElementsByTagName('title')
           ->item(0)
           ->nodeValue;

至于获取主图像,这需要某种可能被视为主图像的提取。您可以获取所有img个元素,并在页面上查找最大的元素。

$dom = new DOMDocument;

$dom->loadHTML('http://google.com');

$imgs = $dom
         ->getElementsByTagName('body')
         ->item(0)
         ->getElementsByTagName('img');

$imageSizes = array();

foreach($imgs as $img) {

  if ( ! $img->hasAttribute('src')) {
     continue;
  }

  $src = $img->getAttribute('src');

  // May need to prepend relative path
  // Assuming Apache, http and port 80

  $relativePath = rtrim($_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI'], '/') . '/';

  if (substr($src, 0, strlen($relativePath) !== $relativePath) {
     $src = $relativePath . $src;
  }

  $imageInfo = getimageinfo($src);

  if ( ! $imageInfo) {
     continue;
  }    

  list($width, $height) = $imageInfo;

  $imageSizes[$width * $height] = $img;

}

$mainImage = end($imageSizes);