实现采集中国天气网未来7天天气需要经过以下步骤:
1. 安装和配置开发环境
要实现采集中国天气网的数据,需要安装并配置好PHP开发环境。以Windows平台为例,可以在官网 https://windows.php.net/download/ 下载Windows版本的PHP安装包并安装,然后配置好环境变量。
2. 利用PHP的cURL库获取中国天气网的网页内容
获取天气预报数据需要获取中国天气网指定城市的对应页面的HTML代码。这个可以通过PHP的cURL库来实现。具体代码示例如下:
// 设置cURL
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.weather.com.cn/weather/101010100.shtml');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 获取HTML内容
$html = curl_exec($ch);
curl_close($ch);
上述代码中,将要获取的页面链接传入 CURLOPT_URL
选项中,设置 CURLOPT_FOLLOWLOCATION
选项为 true
可以实现HTTP跳转。最后将获取的HTML内容保存在 $html
变量中。
3. 用正则表达式提取所需数据
由于中国天气网没有提供API供调用,因此需要从HTML代码中提取所需的数据。这可以通过正则表达式实现。下面的示例代码可以从中国天气网的HTML中提取出未来7天的日期和天气情况:
// 匹配未来7个日期
preg_match_all('/<li class="skyid" .*?>\s+<h1>(.*?)<\/h1>\s+<p>(.*?)<\/p>/is', $html, $dateMatches);
// 匹配未来7天的天气情况
preg_match_all('/<p class="wea" .*?>(.*?)<\/p>/is', $html, $weatherMatches);
// 打印结果
for ($i = 0; $i < 7; $i++) {
echo $dateMatches[1][$i].' '.$dateMatches[2][$i].' '.$weatherMatches[1][$i]."\n";
}
上述代码中,第一个正则表达式匹配的是未来7天的日期和天气情况,其匹配规则为 <li class="skyid" .*?>\s+<h1>(.*?)<\/h1>\s+<p>(.*?)<\/p>
。其中,第一个括号中的 .*?
表示可以匹配任何字符,而 ()
表示分组。第二个正则表达式则匹配未来7天的天气情况。
示例1:利用PHP将抓取到的天气数据保存在本地
以下示例代码展示了如何将抓取到的天气数据保存在本地的csv文件中:
// 匹配未来7个日期
preg_match_all('/<li class="skyid" .*?>\s+<h1>(.*?)<\/h1>\s+<p>(.*?)<\/p>/is', $html, $dateMatches);
// 匹配未来7天的天气情况
preg_match_all('/<p class="wea" .*?>(.*?)<\/p>/is', $html, $weatherMatches);
// 保存到文件中
$fp = fopen('weather.csv', 'w');
for ($i = 0; $i < 7; $i++) {
fputcsv($fp, array($dateMatches[1][$i], $dateMatches[2][$i], $weatherMatches[1][$i]));
}
fclose($fp);
上述代码中,我们使用 fopen()
函数打开一个名为 weather.csv
的文件,并用 fputcsv()
函数将抓取到的天气数据写入文件中,每行数据用逗号分隔。
示例2:利用PHP将抓取到的天气数据展示在网页中
以下示例代码展示了如何将抓取到的天气数据展示在一个网页中:
// 匹配未来7个日期
preg_match_all('/<li class="skyid" .*?>\s+<h1>(.*?)<\/h1>\s+<p>(.*?)<\/p>/is', $html, $dateMatches);
// 匹配未来7天的天气情况
preg_match_all('/<p class="wea" .*?>(.*?)<\/p>/is', $html, $weatherMatches);
// 构造HTML并输出
$html = '<table><thead><tr><th>日期</th><th>星期</th><th>天气</th></tr></thead><tbody>';
for ($i = 0; $i < 7; $i++) {
$html .= '<tr><td>'.$dateMatches[1][$i].'</td><td>'.$dateMatches[2][$i].'</td><td>'.$weatherMatches[1][$i].'</td></tr>';
}
$html .= '</tbody></table>';
echo $html;
上述代码中,我们对抓取到的天气数据进行了整理并构造了一个HTML表格,最后将其输出到浏览器中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP实现采集中国天气网未来7天天气 - Python技术站