PHP爬取历史天气

PHP爬取历史天气

PHP作为宇宙第一语言,爬虫也是非常方便,这里爬取的是从天气网获得中国城市历史天气统计结果。

程序架构

1146398-20170908212302022-2020051190.png

main.php

<?phpinclude_once("./parser.php");include_once("./storer.php");#解析器和存储器见下文$parser = new parser();$storer = new storer();#获得url列表$urlList = $parser->getCityList("http://lishi.tianqi.com/");#依次解析新的URL网站内容,并存到数据库中foreach($urlList as $url){$data = $parser->getData($url);$storer->store($data);}

解析器

解析器提供两个接口,一个是解析主页,获得url列表;另一个是解析每座城市的数据,获得该城市的历史天气数据。

这里使用到的解析库是phpquery,使用JQuery的查询方式,简单高效。

<?php#借助JQuery库解析include_once("./phpQuery-onefile.php");
class parser
{//获取城市url列表function getCityList($url){//直接在线流下载phpQuery::newDocumentFile($url);//第一次选择$links = pq(".bcity *");$urlList = [];foreach ($links as $link) {#第二次选择$tmp = pq($link)->find('a')->attr('href');#过滤组标签if ($tmp!="#" and $tmp!="") {#检查urlif(strpos($tmp,"-")==false and filter_var($tmp, FILTER_VALIDATE_URL))$urlList[] = $tmp; #添加URL列表}}return $urlList;}//获取某个城市的历史气候function getData($url){//直接在线流下载phpQuery::newDocumentFile($url);//第一次选择$text = pq("div .tqtongji p")->text();#匹配城市$city = $this->match("/,(.+)共出现/",$text);#匹配天气$rainy = $this->match("/雨(\d+)天/",$text);$cloudy = $this->match("/多云(\d+)天/",$text);$sunny = $this->match("/晴(\d+)天/",$text);$overcast = $this->match("/阴(\d+)天/",$text); #为了跟cloudy区分$snowy = $this->match("/雪(\d+)天/",$text);#匹配拼音$pinYin = $this->match("/http:\/\/lishi\.tianqi\.com\/(.*?)\/index\.html/",$url);$result["url"] = $url;$result["city"] = $city;$result["pinYin"] =  $pinYin;$result["rainy"] = $rainy;$result["cloudy"] = $cloudy;$result["sunny"] = $sunny;$result["overcast"] = $overcast;$result["snowy"] = $snowy;return $result;}#正则解析function match($rule,$text){preg_match_all($rule, $text, $result);#有些地区不是所有天气都有if(count($result[1])==0)return "0";return $result[1][0];}
}

存储器

使用MySQLi接口即可,代码如下:

<?phpclass storer{public $mysqli;function __construct(){$this->mysqli = new mysqli('localhost', '***', '******', 'phpWeather');$this->mysqli->query("SET NAMES UTF8");}function store($data){$url = $data["url"];$city = $data["city"];$pinYin = $data["pinYin"];$rainy = $data["rainy"];$cloudy = $data["cloudy"];$sunny = $data["sunny"];$overcast = $data["overcast"];$snowy = $data["snowy"];#字符串在插入时要添加''来区分$insertData = "VALUES('$city','$pinYin',$rainy,$cloudy,$sunny,$overcast,$snowy,'$url');";#sql分开写更加清楚$sql = "INSERT INTO record(city,pinYin,rainy,cloudy,sunny,overcast,snowy,url)".$insertData;$isok = $this->mysqli->query($sql);if($isok){echo "$city 数据添加成功\n";}else{echo $sql . "\n";echo "$city 数据添加失败\n";}}function __destruct(){$this->mysqli->close();}}
?>

爬虫结果

1146398-20170908212329741-271826434.png

共爬取了3119座城市的从2011年到现在的历史天气,接下来的数据分析以及可视化留到下一篇博客讲述。

转载于:https://www.cnblogs.com/fanghao/p/7496469.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 第三方库之docx

日常上官网 https://python-docx.readthedocs.io/en/latest/ 一、安装 pip install python-docx 二、写入word word 中主要有两种用文本格式等级&#xff1a;块等级&#xff08;block-level&#xff09;和内联等级&#xff08;inline-level&#xff09;word 中大部分内容都…

Unity AI副总裁Danny Lange:如何用AI助推游戏行业?

本文讲的是Unity AI副总裁Danny Lange&#xff1a;如何用AI助推游戏行业&#xff1f; &#xff0c;10月26日&#xff0c;在加州山景城举办的ACMMM 2017大会进入正会第三天。在会上&#xff0c;Unity Technology负责AI与机器学习的副总裁Danny Longe进行了题为《Bringing Gaming…

SPI 读取不同长度 寄存器_SPI协议,MCP2515裸机驱动详解

SPI概述Serial Peripheral interface 通用串行外围设备接口是Motorola首先在其MC68HCXX系列处理器上定义的。SPI接口主要应用在 EEPROM&#xff0c;FLASH&#xff0c;实时时钟&#xff0c;AD转换器&#xff0c;还有数字信号处理器和数字信号解码器之间。SPI&#xff0c;是一种高…

oracle并发执行max,跪求大量并发执行insert into select语句的方案

现在有数十万张表要从A库通过insert into tablename select * from tablenamedblink的方式导入到B库中。B机上80个cpu&#xff0c;160G内存。希望能够大量并发执行。怎么写脚本呢&#xff1f;谁有这方面的经验&#xff0c;麻烦指点一下。谢谢。下面是我的脚本&#xff1a;#!/us…

20162314 《Program Design Data Structures》Learning Summary Of The First Week

20162314 2017-2018-1 《Program Design & Data Structures》Learning Summary Of The First Week Summary of teaching materials Algorithm analysis is the basic project of the computer science.Increasing function prove that the utilization of the time and spa…

高并发解决方法

2019独角兽企业重金招聘Python工程师标准>>> 高并发来说&#xff0c;要从实际项目的每一个过程去考虑&#xff0c;页面&#xff0c;访问过程&#xff0c;服务器处理&#xff0c;数据库访问每个过程都可以处理。&#xff08;前端-宽带-后端-DB&#xff09; 集群&…

MySQL 之 存储过程

一、初识存储过程 1、什么是存储过程 存储过程是在大型数据库系统中一组为了完成特定功能的SQL语句集&#xff0c;存储在数据库中。存储过程经过第一次编译后&#xff0c;再次调用不需要编译&#xff0c;用户可以通过指定的存储过程名和给出一些存储过程定义的参数来使用它。…

C/C++面试感受和经验以及面试题收藏

http://topic.csdn.net/u/20080924/15/3b00a84e-970f-4dea-92f2-868c5d1ad825.html 前段时间刚参加了n多公司的C/C软件工程师的面试&#xff0c;有国企&#xff0c;外企&#xff0c;私企&#xff08;moto&#xff0c;飞思卡尔&#xff0c;港湾&#xff0c;中国卫星XXX&#xf…

oracle存储过程季度方法,Oracle存储过程、触发器实现获取时间段内周、月、季度的具体时间...

欢迎技术交流。 QQ&#xff1a;138986722创建table&#xff1a;create table tbmeetmgrinfo(id number primary key, /*主键&#xff0c;自动增加 */huiyishi number, /*会议室编号 */STARTTIME varchar2(30), /*会议开始时间 */ENDTIME varchar2(30), /*会议结束时间 */CREATE…

如何root安卓手机_安卓Root+卡开机画面救砖教程丨以一加手机为例

一加手机买到手已经用了1个多月了&#xff0c;还有很多朋友在问我怎么Root、怎么替换Recovery、怎么安装Magisk、有时候刷Magisk模块变砖怎么解救。小编统一整理一下&#xff0c;其他安卓手机也可以参考&#xff0c;很多思路都是通用的。一加手机刷入TWRP并RootTWRP大概是现在安…

Linux用ctrl + r 查找以前(历史)输入的命令

在Linux系统下一直用上下键查找以前输入的命令&#xff0c;这个找刚输入不久的命令还是很方便的&#xff0c;但是比较久远的命令&#xff0c;用上下键效率就不高了。那个history命令也是个花架子&#xff0c;虽然功能多&#xff0c;但不好用&#xff0c;网上找了下&#xff0c;…

敬畏生产环境

生产环境即是运行用户正在使用的系统环境。有时&#xff0c;一些粗心的用户会把他们的生产环境交给我们&#xff0c;希望我们来进行变更操作&#xff0c;如部署Agent等。但我们实际上并不清楚这些生产环境有多重要&#xff0c;有时也不清楚我们的变更操作有多危险&#xff0c;其…

unity消息队列判断字符串相等有错误_Python3十大经典错误及解决办法

◆ ◆ ◆ ◆ ◆接触了很多Python爱好者&#xff0c;有初学者&#xff0c;亦有转行人。不论大家学习Python的目的是什么&#xff0c;总之&#xff0c;学习Python前期写出来的代码不报错就是极好的。下面&#xff0c;严小样儿为大家罗列出Python3十大经典错误及解决办法&#xf…

php qmqp 没有方法,CentOS7 php 安装 amqp扩展

继续安装完 rabbitmq后&#xff0c;安装phpqmqp扩展1.安装rabbitmq-c安装最新版wget -c https://github.com/alanxz/rabbitmq-c/releases/download/v0.8.0/rabbitmq-c-0.8.0.tar.gztar zxf rabbitmq-c-0.8.0.tar.gzcd rabbitmq-c-0.8.0./configure --prefix/usr/local/rabbitmq…

如何提高UDP的可靠性

TCP是通过确认机制和超时重传机制实现可靠传输 UDP UDP它不属于连接型协议&#xff0c;因而具有资源消耗小&#xff0c;处理速度快的优点&#xff0c;所以通常音频、视频和普通数据在传送时使用UDP较多&#xff0c;因为它们即使偶尔丢失一两个数据包&#xff0c;也不会对接收结…

CentOS 7镜像下载

方式一 官网下载 官网链接&#xff1a;http://isoredirect.centos.org/centos/7/isos/x86_64/ Actual Country 国内资源 Nearby Countries 周边国家资源 方式二 阿里云下载 阿里云站点&#xff1a;http://mirrors.aliyun.com/centos/7/isos/x86_64/ 各个版本的ISO镜像文件…

Docker Dirty Cow逃逸

2019独角兽企业重金招聘Python工程师标准>>> 在Linux中&#xff0c;有一个功能&#xff1a;VDSO(virtual dvnamic shared object),这是一个小型共享库&#xff0c;能将内核自动映射到所有用户程序的地址空间。 Docker逃逸利用Dirty Cow漏洞&#xff0c;将Payload写到…

九月腾讯,创新工场,淘宝等公司最新面试三十题(更新至10.04)

九月腾讯&#xff0c;创新工场&#xff0c;淘宝等公司最新面试三十题 引言 曾记否&#xff0c;去年的10月份也同此刻一样&#xff0c;是找工作的高峰期&#xff0c;本博客便是最初由整理微软等公司面试题而发展而来的。如今&#xff0c;又即将迈入求职高峰期--10月份&#…

oracle 存long,ORACLE中LONG类型字段的存取

&#xfeff;&#xfeff;Oracle中存取4000字节以上大文本类型可以用此数据类型&#xff0c;其在C#中的读写方法如下&#xff1a;注意需要引用 System.Data.OracleClient然后添加命名空间&#xff1a;using System.Data.OracleClientORALCE建库脚本&#xff1a;CREATE TABLE TE…

创建office一直转圈_Windows写字板出现广告条幅:推荐用户使用在线版Office

自Windows 95开始&#xff0c;写字板(Wordpad)应用就一直预装在Windows操作系统中。它是一款非常简单的文本编辑器&#xff0c;在功能方面介于记事本和Word之间。近日Rafael Rivera发现微软正在为这款古老的写字板添加新功能--在应用中添加广告横幅。这个广告横幅就是推荐那些写…