PHP-如何获得主要的HTML内容,如Firefox中的阅读器模式



在安卓Firefox应用程序和safari iPad中,我们可以通过"阅读器模式"只读取主要内容。阅读更多。。。如何用PHP只识别HTML中的主要内容?

我需要通过php检测像Firefox或safari这样的主要新闻

例如,我通过以下代码从bbcsite.com/news/123获得新闻:

<?php
    $html = file_get_contents('http://bbcsite.com/news/123');
?>

然后只显示没有广告的主要新闻。。。比如Firefox和safari。

我找到fivefilters.org。这个网站可以获取内容!!!

感谢

一个名为PHP Goose的新PHP库似乎也在这方面做得很好。它很容易使用,而且对作曲家很友好。

以下是实际自述文件中给出的用法示例:

use GooseClient as GooseClient;
$goose = new GooseClient();
$article = $goose->extractContent('http://url.to/article');
$title = $article->getTitle();
$metaDescription = $article->getMetaDescription();
$metaKeywords = $article->getMetaKeywords();
$canonicalLink = $article->getCanonicalLink();
$domain = $article->getDomain();
$tags = $article->getTags();
$links = $article->getLinks();
$movies = $article->getMovies();
$articleText = $article->getCleanedArticleText();
$entities = $article->getPopularWords();
$image = $article->getTopImage();
$allImages = $article->getAllImages();

Readability.php工作得很好,但我发现,如果你对html内容进行卷曲并欺骗用户代理,你会得到更成功的结果。你也可以使用一些重定向转发,以防你试图点击的url给你带来绕过。以下是我现在使用的从另一篇文章中稍微修改过的内容(PHP Curl遵循重定向)。希望你觉得它有用。

function getData($url) {
    $url = str_replace('&amp;', '&', urldecode(trim($url)) );
    $timeout = 5;
    $cookie = tempnam('/tmp', 'CURLCOOKIE');
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3) Gecko/20041001 Firefox/0.10.1');
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_ENCODING, '');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_AUTOREFERER, true);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    $content = curl_exec($ch);
    curl_close ($ch);
    return $content;
}

实施:

$url = 'http://';
//$html = file_get_contents($url);
$html = getData($url);
if (function_exists('tidy_parse_string')) {
    $tidy = tidy_parse_string($html, array(), 'UTF8');
    $tidy->cleanRepair();
    $html = $tidy->value;
}
$readability = new Readability($html, $url);
//...

PHP中没有这样的内置函数。恐怕我将不得不自己解析和分析HTML文档。您可能需要使用一些XML解析器,SimpleXML库是一个很好的候选者。

我不熟悉您所指的"阅读器模式"功能,但一个好的起点可能是删除所有<img>内容。它使用的实际"清理"算法当然一点也不琐碎,而且它似乎实际上是作为对Javascript中的第三方封闭源服务的调用来实现的。

万岁!!!

我发现了这个源代码:

1) 创建Readability.php

2) 创建JSLikeHTMLElement.php

3) 通过以下代码创建index.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
    <head>
        <title>!</title>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    </head>
<body dir="rtl">
<?php
include_once 'Readability.php';

// get latest Medialens alert 
// (change this URL to whatever you'd like to test)
$url = 'http://';
$html = file_get_contents($url);
// Note: PHP Readability expects UTF-8 encoded content.
// If your content is not UTF-8 encoded, convert it 
// first before passing it to PHP Readability. 
// Both iconv() and mb_convert_encoding() can do this.
// If we've got Tidy, let's clean up input.
// This step is highly recommended - PHP's default HTML parser
// often doesn't do a great job and results in strange output.
if (function_exists('tidy_parse_string')) {
    $tidy = tidy_parse_string($html, array(), 'UTF8');
    $tidy->cleanRepair();
    $html = $tidy->value;
}
// give it to Readability
$readability = new Readability($html, $url);
// print debug output? 
// useful to compare against Arc90's original JS version - 
// simply click the bookmarklet with FireBug's console window open
$readability->debug = false;
// convert links to footnotes?
$readability->convertLinksToFootnotes = true;
// process it
$result = $readability->init();
// does it look like we found what we wanted?
if ($result) {
    echo "== Title =====================================n";
    echo $readability->getTitle()->textContent, "nn";
    echo "== Body ======================================n";
    $content = $readability->getContent()->innerHTML;
    // if we've got Tidy, let's clean it up for output
    if (function_exists('tidy_parse_string')) {
        $tidy = tidy_parse_string($content, array('indent'=>true, 'show-body-only' => true), 'UTF8');
        $tidy->cleanRepair();
        $content = $tidy->value;
    }
    echo $content;
} else {
    echo 'Looks like we couldn't find the content. :(';
}
?>
</body>
</html>

$url = 'http://';中设置您的网站url。

谢谢;)

这是为了显示整个内容,如果你想了解更多信息,只需在谷歌中搜索正则表达式,以及如何在html文件中的标签之间获取值,我会用演示告诉你为什么:)

首先,当你使用函数文件获取内容时,你会得到带有html代码的文件,但服务器或浏览器会像页面一样显示这个代码,

$html = file_get_contents('http://coder-dz.com');
preg_match_all('/<li>(.*?)</li>/s', $html, $matches);
foreach($matches[1] as $mytitle)
{
echo $mytitle."<br/>";
}

我在这里做了什么?我得到我的网站的内容是word press我得到标题,因为标题它们在HTML li的标签中,之后我使用正则表达式来获得这些标签之间的值。

我希望你明白我的意思,因为我不懂英语,如果你有任何问题,请随时问我

相关内容

  • 没有找到相关文章

最新更新