久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

你敢信?四行Python代碼就能知道你那的天氣!

今天給大家?guī)淼腜ython實(shí)戰(zhàn)項(xiàng)目是四行Python代碼獲取所在城市的天氣預(yù)報(bào),我們隱隱聽到唏噓聲,不信四行Python代碼可以獲取是嗎?那我們一起來看看:

四行Python代碼就能知道你那的天氣,你敢信?

使用Python獲取天氣預(yù)報(bào),想想是件很簡單的事情。無非是發(fā)送一個(gè)HTTP請求,再解析請求返回的結(jié)果。當(dāng)你真的使用Python程序去獲取天氣預(yù)報(bào)以后,會(huì)發(fā)現(xiàn),有不少坑在等著你。這里簡單記錄一下我遇到的坑,供大家參考。

如何獲取

使用Python獲取天氣有兩種不同的方法,一種是像平時(shí)爬蟲一樣,獲取天氣預(yù)報(bào)網(wǎng)站的HTML頁面,再使用XPath或BeautifulSoup解析HTML頁面的內(nèi)容。這是比較傳統(tǒng)的爬蟲方式。此外,還有另外一種比較合適的方法——通過天氣預(yù)報(bào)網(wǎng)站提供的API。通過API,直接獲取結(jié)構(gòu)化的數(shù)據(jù),省去了解析HTML的煩惱。

使用API

搜索"天氣預(yù)報(bào) API"這兩個(gè)關(guān)鍵字,會(huì)有很多相關(guān)的內(nèi)容,例如,這個(gè)

https:/

python -c "import requests"

/http://wwwzhihu.com/question/20575288

答案下就列出了不少提供API訪問天氣預(yù)報(bào)的網(wǎng)站。

然而,大部分都已經(jīng)不可用了。部分可用的需要收費(fèi)或者需要注冊,都比較麻煩。有沒有比較省事的方案呢?找來找去,我找到了中國天氣網(wǎng)的API。無需注冊直接可用,返回json格式的數(shù)據(jù),無需使用BeautifulSoup或XPath解析,非常的方便。贊!

例如,可以直接訪問下面的地址,在瀏覽器中查看中國天氣網(wǎng)返回的json數(shù)據(jù):

http://www.weather.com.cn/data/sk/101020100.html

有了API處理起來就很簡單了,直接使用Python世界最知名的requests訪問API即可。

安裝requests:

pip install requests

檢查安裝是否成功:

python -c "import requests"

使用ipython測試:

In [1]: import requests
In [2]: r = requests.get('http://www.weather.com.cn/data/sk/101020100.html')
In [3]: r.status_code
Out[3]: 200
In [4]: r.content
Out[4]: '{"weatherinfo":{"city":"????μ·","cityid":"101020100","temp":"15","WD":"???é£?","WS":"1?o§","SD":"50%","WSE":"1","time":"17:08","isRadar":"1","Radar":"JC_RADAR_AZ9210_JB","njd":"????? ?????μ","qy":"1020","rain":"0"}}'
In [5]: r.json()
Out[5]: {u'weatherinfo': {u'Radar': u'JC_RADAR_AZ9210_JB',
 u'SD': u'50%',
 u'WD': u'???�',
 u'WS': u'1?o§',
 u'WSE': u'1',
 u'city': u'????μ·',
 u'cityid': u'101020100',
 u'isRadar': u'1',
 u'njd': u'????? ?????μ',
 u'qy': u'1020',
 u'rain': u'0',
 u'temp': u'15',
 u'time': u'17:08'}}

requests庫包含一個(gè)名為json的方法,當(dāng)請求的地址返回的是json格式的數(shù)據(jù)時(shí),直接使用該方法訪問即可,無需使用標(biāo)準(zhǔn)庫的json庫。

解決亂碼

如果大家剛才在瀏覽器中打開了我給的地址,會(huì)發(fā)現(xiàn),輸出結(jié)果是亂碼的。如下所示:

四行Python代碼就能知道你那的天氣,你敢信?

我們可以在ipython中,查看數(shù)據(jù)編碼:

In [6]: r.encoding
Out[6]: 'ISO-8859-1'

我們知道,亂碼是因?yàn)榻獯a的字符集與編碼的字符集不一樣,所以才會(huì)有亂碼。那么,我們怎么知道數(shù)據(jù)的編碼字符集呢?這個(gè)時(shí)候就靠猜了。眾所周知,utf-8因?yàn)楦鞣N優(yōu)點(diǎn)(如果大家感興趣,我可以寫一篇字符集編碼的文章),是使用最廣泛的字符集編碼,因此,我們可以嘗試使用utf-8進(jìn)行解碼。如下所示:

In [7]: r.json()['weatherinfo']['city']
Out[7]: u'????μ·'
In [8]: '????μ·'.decode('utf-8')
Out[8]: u'上海'
In [9]: print '????μ·'.decode('utf-8')
上海

可以看到,使用utf-8解碼以后,可以正確的顯示數(shù)據(jù)。也就是說,中國天氣網(wǎng)返回給我們的數(shù)據(jù),應(yīng)該是utf-8格式的。那么,為什么會(huì)亂碼呢?這可能是中國天氣網(wǎng)的工程師水平不行,也可能是故意不想讓我們使用,誰知道呢。

我們已經(jīng)知道了正確的編碼,接下來,只要將相應(yīng)的數(shù)據(jù),使用utf-8格式解碼即可。requests庫本身提供了這樣的功能,如下所示:

In [10]: r.encoding = 'utf-8'
In [11]: print r.json()['weatherinfo']['city']
上海

獲取不同城市的天氣預(yù)報(bào)

前面的例子,獲取的是上海的天氣預(yù)報(bào)。如果想要使用中國天氣網(wǎng)的API,獲取其他城市的天氣預(yù)報(bào)呢?中國天氣網(wǎng)并沒有提供相應(yīng)的接口,我們只能自己想辦法。

在我們測試的URL中,101020100是城市的代碼,我們只需要找到其他城市的代碼,將101020100替換成相應(yīng)的代碼即可。查找方法是,在中國天氣網(wǎng)的首頁,搜索城市的名稱,地址欄中會(huì)顯示相應(yīng)城市的代碼。如下所示:

四行Python代碼就能知道你那的天氣,你敢信?

4 行Python代碼獲取天氣預(yù)報(bào)

使用Python獲取天氣預(yù)報(bào)的例子中,我們的主要任務(wù)在于找到相應(yīng)的API,解決字符集編碼問題。當(dāng)這些問題解決以后,直接使用requests庫獲取天氣預(yù)報(bào)即可。下面是獲取所在城市天氣預(yù)報(bào)的4行Python代碼:

In [1]: import requests
In [2]: r = requests.get('http://www.weather.com.cn/data/sk/101020100.html')
In [3]: r.encoding = 'utf-8'
In [4]: print r.json()['weatherinfo']['city'], r.json()['weatherinfo']['WD'], r.json()['weatherinfo']['temp']
上海 東風(fēng) 15

感謝您的閱讀,以上就是我們用四行代碼獲取的上海的天氣預(yù)報(bào),你現(xiàn)在相信了嗎?還不趕緊套用一下,看看你那的天氣怎么樣,好了,更多有趣有料的Python實(shí)戰(zhàn)項(xiàng)目盡在馬哥教育官網(wǎng),敬請關(guān)注!

免責(zé)聲明:內(nèi)容和圖片源自網(wǎng)絡(luò),版權(quán)歸原作者所有,如有侵犯您的原創(chuàng)版權(quán)請告知,我們將盡快刪除相關(guān)內(nèi)容。

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!

    1. 主站蜘蛛池模板: 恩平市| 泊头市| 西平县| 库伦旗| 西安市| 乐平市| 隆安县| 桦川县| 淄博市| 吴川市| 鹤岗市| 墨脱县| 寿光市| 松桃| 尉氏县| 称多县| 高青县| 平罗县| 连江县| 黄龙县| 卢湾区| 新郑市| 永城市| 洪湖市| 上杭县| 响水县| 九台市| 稷山县| 阳城县| 昌吉市| 色达县| 乐至县| 福鼎市| 庆城县| 绍兴县| 百色市| 德江县| 凭祥市| 从江县| 建水县| 富源县|