通过php从另一个网站获取文本[关闭]
Posted
技术标签:
【中文标题】通过php从另一个网站获取文本[关闭]【英文标题】:Take text from another website through php [closed] 【发布时间】:2014-03-11 13:59:09 【问题描述】:我试图从另一个网站“获取”文本,并将其发布到我的网站上,这样当另一个网站更新“div”或其他对象内的文本时,我的网站也会更新。
这可以在 php 中完成吗?如果有,怎么做?
【问题讨论】:
可以,但需要在 crontab 中运行脚本。 您有其他网站的许可吗? 您将需要 PHP 中的 curl 之类的东西来向其他站点发出 HTTP 请求。有关 curl 的更多信息,请参阅此 SO:***.com/questions/3062324/what-is-curl-in-php 您可以选择在每次加载页面时检查其他站点,或者您可以按照 ImadOS 的建议运行 cron 作业(或 Windows 中的计划任务)。 【参考方案1】:php 有内置函数 file_get_contents 来做这个
$html=file_get_contents("http://www.website.com")
但这并不是特别有用,而且您不能对请求设置超时,所以这里有一个使用 curl 的快速函数:
function getHTML($url,$timeout)
$gs = curl_init($url); // initialize curl with given url
curl_setopt($gs, CURLOPT_USERAGENT, $_SERVER["HTTP_USER_AGENT"]); // set useragent
curl_setopt($gs, CURLOPT_RETURNTRANSFER, true); // write the response to a variable
curl_setopt($gs, CURLOPT_FOLLOWLOCATION, true); // follow redirects
curl_setopt($gs, CURLOPT_CONNECTTIMEOUT, $timeout); // max. seconds
curl_setopt($gs, CURLOPT_FAILONERROR, 1); // stop if an error is encountered
return @curl_exec($gs);
然后你可以使用正则表达式来获取你想要的数据,例如
preg_match("/<title>(.*)<\/title>/i", $html, $match);
$pagetitle = $match[1];
编辑:
针对下面关于 Regex 的评论,我建议您查看以下 Stack Overflow 问题和答案:
This one!
PHP 文档对象模型可能正是您所寻找的。p>
【讨论】:
不要用正则表达式解析 html - 这会导致疯狂 查看更新的答案。您是在考虑 PHP 文档对象模型还是有其他建议? yup DOM,并不总是最好的选择,但通常比正则表达式更好 很公平。我想这取决于您正在解析的页面的大小。你知道 PHP DOM 是否比 REGEX 更快? 很有趣,他指的是这个:***.com/a/1732454/457836关于堆栈溢出的最佳答案。【参考方案2】:这个呢:
<?php
function getHTMLData($url , $query)
$data = simplexml_load_file($url);
$result = $data->$query;
记住 HTML 来自 XML,浏览器使用那里的标签解析它
【讨论】:
以上是关于通过php从另一个网站获取文本[关闭]的主要内容,如果未能解决你的问题,请参考以下文章