输入城市名称(支持中文),输出城市天气信息
1.首先导入相关库
#coding='utf-8'
import requests
from bs4 import BeautifulSoup as bs
import pypinyin #汉字拼音转换
import lxml
2.实现汉字转拼音函数
# 实现汉字转拼音,如中国为zhongguo
def hanzi2pinyin(hanzi):
value = ''
for i in pypinyin.pinyin(hanzi, style=pypinyin.NORMAL): # style默认是带声调的
value += ''.join(i)
return value
3.获取天气情况函数
# 获取天气预报
def getWeather(cityHZ):
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36"
}
cityPY = hanzi2pinyin(cityHZ)
print('拼音:', cityPY)
url = 'https://www.tianqi.com/{0}/'.format(cityPY) # url = 'https://www.tianqi.com/guangzhou/'
print(url)
web_data = requests.get(url, headers=header)
soup = bs(web_data.text, 'lxml')
dateList = soup.select('body > div.weatherbox > div > div.right > div.day7 > ul.week > li > b') # 日期
dayList = soup.select('body > div.weatherbox > div > div.right > div.day7 > ul.week > li > span') # 周几
weatherList = soup.select('body > div.weatherbox > div > div.right > div.day7 > ul.txt.txt2 > li') # 天气
windList = soup.select('body > div.weatherbox > div > div.right > div.day7 > ul:nth-of-type(3) > li') # 风向
max_tempList = soup.select('body > div.weatherbox > div > div.right > div.day7 > div > ul > li > span') # 温度
min_tempList = soup.select('body > div.weatherbox > div > div.right > div.day7 > div > ul > li > b')
city = soup.select('body > div.weatherbox > div > div.left > dl > dd.name > h2')[0].text
now = soup.select('body > div.weatherbox > div > div.left > dl > dd.week')[0].text
pm = soup.select('body > div.weatherbox > div > div.left > dl > dd.kongqi > h6')[0].text
zhiliang = soup.select('body > div.weatherbox > div > div.left > dl > dd.kongqi > h5')[0].text
wet = soup.select('body > div.weatherbox > div > div.left > dl > dd.shidu > b:nth-of-type(1)')[0].text
feng = soup.select('body > div.weatherbox > div > div.left > dl > dd.shidu > b:nth-of-type(2)')[0].text
ziwai = soup.select('body > div.weatherbox > div > div.left > dl > dd.shidu > b:nth-of-type(3)')[0].text
pt = PrettyTable()
pt.add_column(city, ['日期', '星期', '天气', '风向', '最高', '最低'])
for date, day, weather, wind, max_temp, min_temp in zip(dateList, dayList, weatherList, windList, max_tempList,min_tempList):
pt.add_column('-', [date.get_text(), day.get_text(), weather.get_text(), wind.get_text(), max_temp.get_text(), min_temp.get_text()])
# 输出天气情况
print('------------------------------------------------------------------------------------')
print('城市-', city)
print(now) # 当前日期
print('今日天气')
print(pm) # pm值
print(zhiliang) # 空气质量
print(wet) # 湿度
print(feng) # 风向
print(ziwai) # 紫外线
print('------------------------------------------------------------------------------------')
print('未来一周天气情况:')
print(pt)
4.执行代码:
if __name__ == "__main__":
getWeather(u'台北')