【问题标题】:PHP Scrape Article Excerpt like ReadabilityPHP Scrape 文章摘录,如可读性
【发布时间】:2012-07-30 16:19:18
【问题描述】:

我见过this question,但它并不能真正满足我的需求。该问题的答案是:从元描述标签中提取,第二个是为您已经拥有正文的文章生成摘录。

我想要做的实际上是获取一篇文章的前几句话,就像 Readability 一样。什么不是最好的方法? HTML解析?这是我目前正在使用的,但这不是很可靠。

function guessExcerpt($url) {
    $html = file_get_contents_curl($url);

    $doc = new DOMDocument();
    @$doc->loadHTML($html);

    $metas = $doc->getElementsByTagName('meta');

    for ($i = 0; $i < $metas->length; $i++)
    {
        $meta = $metas->item($i);
        if($meta->getAttribute('name') == 'description')
            $description = $meta->getAttribute('content');

    }

    return $description;
}

function file_get_contents_curl($url) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    $data = curl_exec($ch);
    curl_close($ch);

    return $data;
}

【问题讨论】:

标签: php web-scraping


【解决方案1】:

这里是 PHP 可读性的一个端口:https://github.com/andreskrey/readability.php。就试一试吧。提取结果会类似于Readability(因为它实现了Readability的算法)。

require 'lib/Readability.inc.php';

$html = file_get_contents_curl($url);

$Readability     = new Readability($html, $html_input_charset); // default charset is utf-8
$ReadabilityData = $Readability->getContent();

$title   = $ReadabilityData['title'];
$content = $ReadabilityData['content'];

那么你可以使用$content中的一些句子作为摘录。

【讨论】:

  • 有人知道如何抓取相关的缩略图/图像吗?可读性正是我想要的。
  • @Swivelgames 你知道如何获取缩略图了吗?我想做类似的事情
  • @andrewliu 我用来获取缩略图的方法是多一点代码。我使用preg_match_all/&lt;img.+src=([\'"])([^\'"]+)\1.*?\/?&gt;/i 并构建了一个包含所有图像的数组。通过解析上面示例中的$url,我能够通过确定baseurl 将相对图像路径转换为绝对路径。然后我向用户展示一个包含绝对图像路径的数组以供用户选择。您可以使用简单的脚本创建缩略图并将其保存在 Web 服务器上以显示给用户,或使用 HTML 进行缩放。 发一个新问题,把链接贴在这里,然后我可以给你具体的代码。
  • @Swivelgames:你能使用这个 API 从页面获取相关图像吗?
  • @Programming_crazy 不,我不是。为了检索它,我不得不编写一些额外的代码(在我上面的评论中抽象出来)。但是,我正在使用的解决方案运行良好 :) 如果您对如何使用可读性来检索所有相关图像感到好奇,请发布一个新问题并使用问题的 URL 发表评论。然后我可以为它提供一个很好的答案。而且,请,我知道我之前说过,但不要使用正则表达式来检索图像。这是一种非常非常糟糕的做法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2011-02-03
  • 1970-01-01
相关资源
最近更新 更多