【问题标题】:Take text from another website through php [closed]通过php从另一个网站获取文本[关闭]
【发布时间】:2014-03-11 13:59:09
【问题描述】:

我试图从另一个网站“获取”文本,并将其发布到我的网站上,这样当另一个网站更新“div”或其他对象内的文本时,我的网站也会更新。

这可以在 php 中完成吗?如果有,怎么做?

【问题讨论】:

  • 可以,但需要在 crontab 中运行脚本。
  • 您有其他网站的许可吗?
  • 您将需要 PHP 中的 curl 之类的东西来向其他站点发出 HTTP 请求。有关 curl 的更多信息,请参阅此 SO:stackoverflow.com/questions/3062324/what-is-curl-in-php 您可以选择在每次加载页面时检查其他站点,或者您可以按照 ImadOS 的建议运行 cron 作业(或 Windows 中的计划任务)。

标签: php html


【解决方案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 更快?
  • 很有趣,他指的是这个:stackoverflow.com/a/1732454/457836关于堆栈溢出的最佳答案。
【解决方案2】:

这个呢:

 <?php
 function getHTMLData($url , $query){
     $data = simplexml_load_file($url);
     $result = $data->$query;
 }

记住 HTML 来自 XML,浏览器使用那里的标签解析它

【讨论】:

    猜你喜欢
    • 2017-11-06
    • 1970-01-01
    • 2013-02-23
    • 2016-09-14
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多