我需要通过php
检测主要新闻,如Firefox或safari例如,我通过此代码从bbcsite.com/news/123
获取新闻:
<?php
$html = file_get_contents('http://bbcsite.com/news/123');
?>
然后只展示没有广告的主要新闻......比如Firefox和Safari。
我找到了fivefilters.org。这个网站可以获得内容!!!
谢谢
答案 0 :(得分:3)
一个名为PHP Goose的新PHP库似乎在这方面做得非常好。它非常易于使用且Composer友好。
以下是实际自述文件中的使用示例:
use Goose\Client 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();
答案 1 :(得分:2)
Readability.php工作得很好,但是如果你卷曲html内容并欺骗用户代理,我发现你会得到更多成功的结果。如果您尝试访问的网址为您提供了解决方法,您还可以使用一些重定向转发功能。这是我现在使用的另一篇文章(PHP Curl following redirects)略有修改。希望你觉得它很有用。
function getData($url) {
$url = str_replace('&', '&', 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);
//...
答案 2 :(得分:1)
PHP中没有这样的内置函数。我担心自己必须解析和分析HTML文档。您可能需要使用一些XML解析器,SimpleXML库是一个很好的候选者。
我不熟悉您所指的“阅读器模式”功能,但一个好的起点可能是删除所有<img>
内容。它使用的实际“清理”算法当然不是微不足道的,它似乎实际上是作为第三方的呼叫实现的,封闭的源,service in Javascript。
答案 3 :(得分:1)
万岁!!!
我找到了这个源代码:
1)创建Readability.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, "\n\n";
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://';
设置您的网站网址。
谢谢;)
答案 4 :(得分:0)
这是显示整个内容,如果你想了解更多关于这一点的信息,只需在谷歌搜索关于正则表达式以及如何在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的标签之后我使用正则表达式来获取这些标签之间的值。
我希望你明白我的意思,因为我不是英语,如果你有任何问题随时可以问我