我是php的新手,我已经制作了一个scraper.php页面,您可以在其中检索来自" http://www.weather-forecast.com"的天气信息。对于任何给定的城市。
我正在关注讲师,我看不出为什么我的代码返回一个空白页面时它应该只返回一个短暂的3天预测
无论如何......这是我的代码
<?php
$city=$_GET['city'];
$city=str_replace(" ","",$city);
$contents=file_get_contents("http://www.weather-forecast.com/locations/".$city."/forecasts/latest");
preg_match('/3 Day Weather Forest Summary:<\/b>
<span class="phrase">(.*?)</span>',$contents, $matches);
echo $matches[1];
?>
答案 0 :(得分:0)
它不是空白,而是脚本中的错误。这可能是因为您关闭了错误报告。
从这一行:
preg_match('/3 Day Weather Forest Summary:<\/b><span class="phrase">(.*?)</span>',$contents, $matches);
您忘记了/
上的</span>
(它应该是<\/span>
); preg_match没有结束分隔符/
。 (那里有一个拼写错误,应该是预测&#39;不是森林。)
但即使您修复了这些错误,也无法获得所需内容,因为查看天气预报中的html源代码,您会跳过<span class="read-more-small"><span class="read-more-content">
之后的<\/b>
。
所以,它应该是这样的:
<?php
$city=$_GET['city'];
$city=str_replace(" ","",$city);
$contents=file_get_contents("http://www.weather-forecast.com/locations/".$city."/forecasts/latest");
preg_match('/3 Day Weather Forecast Summary:<\/b><span class="read-more-small"><span class="read-more-content"> <span class="phrase">(.*?)<\/span>/',$contents, $matches);
echo $matches[1];
?>
<小时/> 或强>
您可以使用preg_match_all
获取所有三个天气预报摘要(1 - 3天,4 - 7天和7 - 10天),将所有preg_match
行替换为:
preg_match_all('/<span class="phrase">(.*?)<\/span>/',$contents, $matches);
并回显您的数据:
$matches[0][0]
为1-3天,
{4-}为4-7天,{
{7}天$matches[0][1]
。
答案 1 :(得分:-1)
尝试以下问题:
how-can-i-emulate-a-get-request-exactly-like-a-web-browser,
获得您正在寻找的东西。
<强>解释强>
file_get_contents()
会为您提供静态页面内容。
您在浏览器中实际看到的内容是由HTML / CSS / JS生成的,
并且没有被file_get_contents()
函数看到。
当我尝试直接从浏览器浏览到该网址时
(例如:new york)
并打开页面作为来源,搜索:&#34; 3天天气森林摘要:&#34;。
我没有得到任何结果,所以我假设那是你的问题。