基于python中requests库爬取城市天气情况

个人需求:

    输入城市名称(支持中文),输出城市天气信息

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'台北')

结果如下:

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值