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.pswp.cn/news/454718.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/454718.shtml
英文地址,請注明出處:http://en.pswp.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發現微軟正在為這款古老的寫字板添加新功能--在應用中添加廣告橫幅。這個廣告橫幅就是推薦那些寫…