为这个Meta标签提取STDN脚本PHP

时间:2012-08-06 21:24:45

标签: php screen-scraping meta-tags

我有一个php脚本,可以提取网页的元标记信息。 我在CLI中使用这个脚本。 我的问题是如何添加到接受参数(url)的脚本并将其应用于脚本。同样,这将来自命令行界面。

以下是示例脚本。

#!/usr/bin/php
<?php

    function getMetaData($url){
        // get meta tags
        $meta=get_meta_tags($url);
        // store page
        $page=file_get_contents($url);
        // find where the title CONTENT begins
        $titleStart=strpos($page,'<title>')+7;
        // find how long the title is
        $titleLength=strpos($page,'</title>')-$titleStart;
        // extract title from $page
        $meta['title']=substr($page,$titleStart,$titleLength);
        // return array of data
        return $meta;
    }

    // This line should be replaced with the function call using argv    
    //$tags = getMetaData('$url');

    // Check data was passed
    if (empty($argv[1])) {
        exit("You didn't specify a URL!");
    }

    // Pass the supplied data into your code
    $tags = getMetaData($argv[1]);


    echo 'Title: '.$tags['title'];
    echo "\n";
    echo 'Description: '.$tags['description'];
    echo "\n";
    echo 'Keywords: '.$tags['keywords'];

?>

非常感谢帮助,我是一个php新手。

1 个答案:

答案 0 :(得分:1)

首先,要直接解决您的问题 - 您可以通过$argv全局变量访问脚本的命令行参数。

$argv是在全局范围内注册的标准变量,而不是$_GET$_POST之类的superglobal等等,因此除非在您的函数中可用,否则它将无法使用你把它作为一个参数传递。

第一个参数将在$argv[1]中提供,第二个参数在$argv[2]中提供,等等。

现在要解决有关您的脚本的几点:

  • 在PHP中从HTML中提取信息时,最好的方法是使用DOM。这是适用于PHP的HTML解析器,允许您选择文档中的所有<meta>标记,并轻松提取其属性的值。
  • 您的代码正在下载整个文档两次 - 一次是get_meta_tags(),一次是file_get_contents()。这显然是低效的 - 但是可以通过使用DOM来解决,因为您只需要创建一次文档对象。或者,您可以先使用file_get_contents()并将数据保存到临时文件,然后在该临时文件上调用get_meta_tags()
  • 脚本中的结束?>标记可以(通常应该)省略。这可以防止在脚本末尾意外输出意外的空白区域。

修改

以下是如何使用$argv

的示例
<?php

  // Check data was passed
  if (empty($argv[1])) {
    exit("You didn't specify a URL!");
  }

  // Pass the supplied data into your code
  $tags = getMetaData($argv[1]);

  // ...