Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从html中提取基本信息?_Html_Parsing_Extraction_Information Extraction - Fatal编程技术网

从html中提取基本信息?

从html中提取基本信息?,html,parsing,extraction,information-extraction,Html,Parsing,Extraction,Information Extraction,我有一个项目,用户向外部网站提交许多链接,我需要解析这些提交链接的HTML,并从页面中提取基本信息,就像Digg和Facebook在提交链接时所做的那样 我要检索: 主标题或标题(可以是标题、h1、h2、p等) 介绍或描述文本(可以是div,p等) 主图像 我的主要问题是,这里似乎有太多的选择要探索,我有点困惑,至少坐在那里。到目前为止,我所看到的许多解决方案似乎都不够充分或过于复杂。您可以选择一种服务器端语言来实现这一点 例如,使用PHP,您可以对元标记使用get\u meta\u tags(

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

我要检索:

  • 主标题或标题(可以是标题、
    h1
    h2
    p
    等)
  • 介绍或描述文本(可以是
    div
    p
    等)
  • 主图像

  • 我的主要问题是,这里似乎有太多的选择要探索,我有点困惑,至少坐在那里。到目前为止,我所看到的许多解决方案似乎都不够充分或过于复杂。

    您可以选择一种服务器端语言来实现这一点

    例如,使用PHP,您可以对元标记使用
    get\u meta\u tags()

    $meta = get_meta_tags('http://google.com');
    
    您可以使用DOMDocument来获取
    title
    元素(有些人可能会认为,如果需要
    title
    元素,您也可以使用DOMDocument来获取元标记)

    至于获取主图像,这需要对可能被认为是主图像的内容进行某种提取。您可以获取所有
    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);
    

    谢谢你的回复,亚历克斯。不幸的是,很多时候网页都没有我需要的meta标签信息。通常,站点在所有子页面上都有相同的描述标签,而不是特定于某个页面。使用图像大小的想法是一个好主意。我还在想,如果你有几张大小相同或相似的图片,那么第一张很可能是主要的image@sam是的,很难选择主图像是什么;dr:将html解析库与xpath结合使用。
    $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);