网上好多关于Python各种爬虫以及可视化学习的文章,本人最近刚开始学习python,利用网上资源学习编写了第一个python程序,现将代码传上,供新手参考练习。
环境 WIN7 64位操作系统,pythonV3.63, PyCharm 可直接运行
#! /usr/bin/env python
#! encoding:utf-8
#----------------------------------------------#
# 使用wxPython,BeautifulSoup 编写 #
# 抓取天气预报信息 PythonV3.63 #
# 作者: Jack #
# 日期: 2018-03-23 #
#----------------------------------------------#
import wx
from urllib.request import urlopen
from bs4 import BeautifulSoup
# 城市编号字典
sCityDictionary = {
'南京':'101190101',
'成都':'101270101',
'合肥':'101220101',
'天门':'101201501',
'深圳':'101280601',
'广州':'101280101',
'北京':'101010100',
'上海':'101020100',
'武汉':'101200101',
'重庆':'101040100',
'纽约':'401110101',
'伦敦':'201010100',
'洛杉矶':'401040101',
'巴黎':'202010100',
'东京':'103010100',
'墨尔本':'601060101',
'悉尼':'601020101',
'伊斯坦布尔':'215550100',
'莫斯科':'208010100',
'华盛顿':'401620100'}
class Mywin(wx.Frame):
def __init__(self, parent, title):
super(Mywin, self).__init__(parent, title = title,size = (640,160))
panel = wx.Panel(self)
vbox = wx.BoxSizer(wx.VERTICAL)
#self.btn = wx.Button(panel,-1,"查询",pos = (300,200))
#vbox.Add(self.btn,0,wx.ALIGN_CENTER)
#self.btn.Bind(wx.EVT_BUTTON,self.OnClicked)
self.radioBj = wx.RadioButton(panel, -1, "北京", pos=(350, 10))
vbox.Add(self.radioBj,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioBj)
self.radioSh = wx.RadioButton(panel, -1, "上海", pos=(400, 10))
vbox.Add(self.radioSh,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioSh)
self.radioGz = wx.RadioButton(panel, -1, "广州", pos=(350, 30))
vbox.Add(self.radioGz,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioGz)
self.radioSz = wx.RadioButton(panel, -1, "深圳", pos=(400, 30))
vbox.Add(self.radioSz,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioSz)
self.radioNj = wx.RadioButton(panel, -1, "南京", pos=(350, 50))
vbox.Add(self.radioNj,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioNj)
self.radioHf = wx.RadioButton(panel, -1, "合肥", pos=(400, 50))
vbox.Add(self.radioHf,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioHf)
self.radioWh = wx.RadioButton(panel, -1, "武汉", pos=(350, 70))
vbox.Add(self.radioWh,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioWh)
self.radioTm = wx.RadioButton(panel, -1, "天门", pos=(400, 70))
vbox.Add(self.radioTm,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioTm)
self.radioCq = wx.RadioButton(panel, -1, "重庆", pos=(350, 90))
vbox.Add(self.radioCq,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioCq)
self.radioCd = wx.RadioButton(panel, -1, "成都", pos=(400, 90))
vbox.Add(self.radioCd,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioCd)
self.radioNewyork = wx.RadioButton(panel, -1, "纽约", pos=(450, 10))
vbox.Add(self.radioNewyork,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioNewyork)
self.radioLsj = wx.RadioButton(panel, -1, "洛杉矶", pos=(450, 30))
vbox.Add(self.radioLsj,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioLsj)
self.radioLondon = wx.RadioButton(panel, -1, "伦敦", pos=(450, 50))
vbox.Add(self.radioLondon,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioLondon)
self.radioPl = wx.RadioButton(panel, -1, "巴黎", pos=(450, 70))
vbox.Add(self.radioPl,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioPl)
self.radioDj = wx.RadioButton(panel, -1, "东京", pos=(450, 90))
vbox.Add(self.radioDj,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioDj)
self.radioXn = wx.RadioButton(panel, -1, "悉尼", pos=(510, 10))
vbox.Add(self.radioXn,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioXn)
self.radioMrb = wx.RadioButton(panel, -1, "墨尔本", pos=(510, 30))
vbox.Add(self.radioMrb,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioMrb)
self.radioEst = wx.RadioButton(panel, -1, "伊斯坦布尔", pos=(510, 50))
vbox.Add(self.radioEst,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioEst)
self.radioMsk = wx.RadioButton(panel, -1, '莫斯科', pos=(510, 70))
vbox.Add(self.radioMsk,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioMsk)
self.radioHsd = wx.RadioButton(panel, -1, "华盛顿", pos=(510, 90))
vbox.Add(self.radioHsd,0,wx.ALIGN_CENTER)
self.Bind(wx.EVT_RADIOBUTTON, self.sSelectCity, self.radioHsd)
self.lblWeather = wx.StaticText(panel,-1,pos = (10,10),style = wx.ALIGN_LEFT)
vbox.Add(self.lblWeather,0,wx.ALIGN_CENTER)
self.Centre()
self.Show()
self.Fit()
#提取天气信息
def getWeather(self,sscid):
#print(sscid)
tagurl = 'http://www.weather.com.cn/weather/' + sscid + '.shtml'
resp = urlopen(tagurl)
soup = BeautifulSoup(resp, 'html.parser')
tagDate = soup.find('ul', class_="t clearfix")
dates = tagDate.h1.string
tagToday = soup.find('p', class_="tem")
try:
temperatureHigh = tagToday.span.string
except AttributeError as e:
temperatureHigh = tagToday.find_next('p', class_="tem").span.string
# 获取地址
tagAddr = soup.find('div', class_="crumbs fl")
citys = ''
for k in tagAddr.find_all('a'): # 查a标签的href值
citys = citys + k.string
if citys == '':
citys = tagAddr.string.replace('\r\n\t\t\t\t','',1)
citys = citys.replace('\r\n\t\t\t','',1)
citys = citys.replace('>','',1)
temperatureLow = tagToday.i.string
weather = soup.find('p', class_="wea").string
tagWind = soup.find('p', class_="win")
winL = tagWind.i.string
listWeather = [citys, dates, winL, temperatureLow, temperatureHigh, weather]
citys = '城市: ' + listWeather[0] + '\n'
dates = '今天是:' + listWeather[1] + '\n'
winL = '风级:' + listWeather[2] + '\n'
temperatureLow = '最低温度:' + listWeather[3] + '\n'
temperatureHigh = '最高温度:' + listWeather[4] + '\n'
weather = '天气:' + listWeather[5] + '\n'
listWeather = [citys, dates, winL, temperatureLow, temperatureHigh, weather]
print(listWeather)
self.lblWeather.SetLabel(listWeather[0]+listWeather[1]+listWeather[2]+listWeather[3]+listWeather[4]+listWeather[5])
self.lblWeather.SetForegroundColour((255,0,255))
#self.lblWeather.SetBackgroundColour((0,0,0))
# 获取对应城市的代码
def sSelectCity(self, event):
sCity = event.GetEventObject().GetLabel()
sscid = sCityDictionary.get(sCity,'101190101')#通过字典查找
print(sCity+" "+sscid)
self.getWeather(sscid)
def OnClicked(self, event):
self.sSelectCity(event)
app = wx.App()
Mywin(None, 'wxPython 天气预报')
app.MainLoop()
运行结果