python实现天气查询程序
核心部分:
这里使用中国天气的接口
获取城市,存储至prolist和citylist
def ser():
global daylist,maxlist,minlist,uptime,url,wealist,lifen,life1,life2,life3,images,l,fxlist,d
url = "http://www.weather.com.cn/textFC/hd.shtml"
listdept = []
prolist = []
citylist=[]
base = "http://www.weather.com.cn"
doc = pq(url=url, encoding="utf-8")
daylist=[]
for dept in doc(".lq_contentboxTab2 li a"):
listdept.append(base+pq(dept).attr("href"))
i=0
for url in listdept:
doc = pq(url=url, encoding="utf-8")
provinces = doc(".conMidtab")[1]
for province in provinces:
citys = pq(province)("tr")
i=2
for city in citys:
if citys.index(city) == 2:
prolist.append(pq(city[0])("a").html())
try:
w = q = pq(city[8]).html()
m=0
except:
m=1
if m==0:
q = pq(city[1])("a").html()
if not q == None and not {
"pro": pq(city[0])("a").html(), "city": q, "url": pq(city[8]).html()[10:59]} in citylist and m == 0:
citylist.append({
"pro": pq(city[0])("a").html(), "city": pq(
city[1])("a").html(), "url": pq(city[8]).html()[10:59]})
elif m == 1:
q = pq(city[0])("a").html()
try:
if len(citylist)==0:
raise IndexError
r=citylist[len(citylist)-1]
if not q == None and not {
"pro": r["pro"], "city": q, "url": pq(city[7]).html()[10:59]} in citylist and m == 1:
citylist.append({
"pro": r["pro"], "city": q, "url": pq(city[7]).html()[10:59]})
except:
pass
刚才的citylist中包含具体链接,重设url,存储doc并抓包(作者也不知道为什么天气和生活指数有问题):
wealist=[]
lifes=[]
life=""
for c in citylist:
if c["city"] == pt:
url=c["url"]
break
doc = pq(url=url,encoding="utf-8")
r=doc(".t.clearfix")
maxlist=[]
minlist=[]
wealist=[]
daylist=[]
flist=[]
fxlist=[]
uptime=""
t=time.strftime('%Y-%m-%d', time.localtime(time.time()))
for i in r:
if not str(r(".skyid.lv3.sky"))== "":
rp = r(".skyid.lv3.sky")
print(1)
elif not str(r(".skyid.lv3.on.sky") )== "":
rp = (".skyid.lv3.on.sky")
print(2)
elif not str(r(".skyid.lv2.sky"))== "":
rp = r(".skyid.lv2.sky")
print(3)
elif not str(r(".skyid.lv2.on.sky")) == "":
rp = (".skyid.lv2.on.sky")
print(4)
elif not str(r(".skyid.lv1.sky")) == "":
rp = r(".skyid.lv1.sky")
print(5)
elif not r(".skyid.lv1.on.sky")== "":
rp = r(".skyid.lv1.on.sky")
print(6)
print(rp)
for j in rp:
if not pq(rp)("h1").html()==None:
daylist.append(str(pq(j)("h1").html()))
if not pq(rp)("p").html() == None:
wealist.append(str(pq(j)("p").html()))
mpo=rp(".tem")
for z in mpo:
if not pq(z)("span").html() == None:
if "℃" in str(pq(z)("span").html()):
maxlist.append(str(pq(z)("span").html()))
else:
maxlist.append(str(pq(z)("span").html())+"℃")
if not pq(z)("i"