今天做一個簡單的天氣查詢的程序,主要用到Urllib2(python自帶的),和Json(Java Script Object Notation,JavaScript 對象表示法),安裝步驟: json的安裝包在這里:https://www.lfd.uci.edu/~gohlke/pythonlibs/#simplejson, 打開cmd,進入到Python安裝目錄的Scripts文件夾中.比如:D:\Program Files\Python\Scripts。使用pip安裝剛剛下載好的whl文件,pip.exe install *.whl,例如: cd D:\Program Files\python\Scripts> pip.exe install D:\python\simplejson-3.10.0-cp36-cp36m-win_amd64.whl 提示安裝成功后,在\Python\Lib\site-packages目錄下可以看到simplejson. Urllib2用於獲取網頁的內容,Json用於對內容里的東西進行分析處理, 以下是一個簡單的爬取語句: import urllib2 web = urllib2.urlopen("http://www.sina.com") #這里得加一個http://,不是直接寫網頁地址的 content = web.read() print content 實例: import urllib2 web = urllib2.urlopen("http://www.weather.com.cn/data/cityinfo/101200101.html") #這里得加一個http://,不是直接寫網頁地址的 content = web.read() print content 天氣的查詢是通過中國天氣網(www.weather.com.cn)的信息獲取完成的,點擊http://www.weather.com.cn/data/cityinfo/101010100.html會發現101010100是北京的天氣,這個網站是通過代號查詢的,所以我們做一個城市與代號的字典,city.py,放在網盤中(https://pan.baidu.com/s/1c0Nw4m?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&ssnerror=0&traceid=),使用的時候只要放在和你的代碼同一路徑下,用 from city import city 前一個“city”是模塊名,也就是py文件的名稱,后一個“city”是模塊中變量的名稱。 我們分析http://www.weather.com.cn/data/cityinfo/101010100.html里的內容發現我們想要的內容都在里面,如果把101010100改成別的就變成了其他城市的天氣,所以: #python默認ASCII碼,這一句是為了轉換為UTF-8,不是注釋同時city.py里也要聲明 #在這個程序中第一行加了 # -*- coding: UTF-8 -*- 這句反而不行了,不知道為啥 import urllib2 import json city = { '北京': '101010100', '上海': '101020100', '天津': '101030100', '蘭州': '101160101', '鄂州': '101200301', '荊州': '101200801', '香港': '101320101', '新界': '101320103', '澳門': '101330101', '台北': '101340101', '高雄': '101340201', '台中': '101340401' } cityname = raw_input("The weather in which city do you want ?") citycode = city.get(cityname) print citycode #測試代碼,測試可行 url = ("http://www.weather.com.cn/data/cityinfo/%s.html" %citycode) #一定要注意%s pagecontent = urllib2.urlopen(url).read() print pagecontent binggo。 得到如下數據: {"weatherinfo": {"city":"武漢", "cityid":"101200101", "temp1":"7℃", "temp2":"19℃", "weather":"小雨轉多雲", "img1":"n7.gif", "img2":"d1.gif", "ptime":"18:00"} } 接下來是分析的環節,我們發現這是嵌套的字典,我們只需要里面的temp1,2和weather的信息即可。 那么如何提取嗯? 現在我們需要借助json來完成了,可以先了解一下:http://www.w3school.com.cn/json/ import json data = json.loads(pagecontent),這時候的data已經是一個字典,盡管在控制台中輸出它,看上去和pagecontent沒什么區別 這是編碼上有區別: {u'weatherinfo': {u'city': u'\u5357\u4eac', u'ptime': u'11:00', u'cityid': u'101190101', u'temp2': u'28\u2103', u'temp1': u'37\u2103', u'weather': u'\u591a\u4e91', u'img2': u'n1.gif', u'img1': u'd1.gif'}} 但如果你用type方法看一下它們的類型: print type(pagecontent) print type(data) 就知道區別在哪里了。 import urllib2 import json city = { "北京":"101010100", "武漢":"101200101" } cityname = raw_input("which city?\n") citycode = city.get(cityname) print citycode print if citycode: url = ("http://www.weather.com.cn/data/cityinfo/%s.html" %citycode) print url print page = urllib2.urlopen(url).read() print page #這里打印出來的東西里就有我們想要的東西了 print #使用json data = json.loads(page) #loads是json方法中的一種 result = data["weatherinfo"] str_temp = ("%s\t%s - %s") % ( result["weather"], result["temp1"], result["temp2"] ) print str_temp else: print "Can not find this city." 就可以輸出: 晴-2℃ - 16℃