jtyoui.data.WeatherAddress 源代码

#!/usr/bin/python3.7
# -*- coding: utf-8 -*-
# @Time    : 2019/5/12 16:16
# @Email  : jtyoui@qq.com
# @Software: PyCharm

from jtyoui.file_zip import load_zip
from jtyoui.web import random
import requests
import re
from html.parser import HTMLParser


class _GetData(HTMLParser):

    def __init__(self):
        HTMLParser.__init__(self)
        self.weather_7d = False
        self.name = False
        self.addr = ''
        self.data_7d = []
        self.string = ''

    def handle_starttag(self, tag, attrs):
        if len(attrs) > 0:
            attr = attrs[0]
        else:
            return
        if tag == 'ul' and 't clearfix' in attr:
            self.weather_7d = True
        elif tag == 'div' and 'crumbs fl' in attr:
            self.name = True

    def handle_endtag(self, tag):
        if tag == 'ul':
            self.weather_7d = False
            if self.string:
                self.data_7d.append(self.string[:-1] + '风力')
                self.string = ''
        elif tag == 'div':
            self.name = False

    def handle_data(self, data):
        if self.weather_7d:
            data = data.replace('\n', '').replace(u'\xa0', '')
            if data:
                if '(' in data:
                    if self.string:
                        self.data_7d.append(self.string[:-1] + '风力')
                    self.string = data
                else:
                    self.string += data + ' '
        elif self.name:
            data = re.sub(r'[\r\n \t\xa0>]', '', data)
            self.addr += data


[文档]class WeatherForecast: def __init__(self): """天气预报,使用方法 >>>import jtyoui >>>import pprint >>>w = jtyoui.WeatherForecast() >>>w.set_city('九龙') >>>pprint.pprint(w.get_today_weather()) # 获得当天 天气预报 >>>pprint.pprint(w.get_7day_weather()) # 获得7天天气预报 >>>pprint.pprint(w.get_15day_weather()) # 获得15天天气预报 """ self.weather = load_zip('city.zip', 'city.txt') self.codes = []
[文档] def set_city(self, city): """输入一个城市名字 :param city: 城市名字 """ if self.codes: self.codes.clear() for names in self.weather: code, city_ = names.split(',') if city_ in city: self.codes.append(code)
[文档] def get_today_weather(self): """获得当天 天气预报""" total = [] for code in self.codes: url = F'http://www.weather.com.cn/weather1d/{code}.shtml' response = requests.get(url, headers={'User-Agent': random()}) response.encoding = 'utf-8' data = response.text d = re.findall(r'<input type="hidden" id="hidden_title" value="(.+)" />', data) gd = _GetData() gd.feed(data) total.append({gd.addr: d}) return total
[文档] def get_7day_weather(self): """获得7天 天气预报""" total = [] for code in self.codes: url = F'http://www.weather.com.cn/weather/{code}.shtml' response = requests.get(url, headers={'User-Agent': random()}) response.encoding = 'utf-8' gd = _GetData() gd.feed(response.text) total.append({gd.addr: gd.data_7d}) return total
[文档] def get_15day_weather(self): """获得15天 天气预报""" t_7d = self.get_7day_weather() for code in self.codes: url = F'http://www.weather.com.cn/weather15d/{code}.shtml' response = requests.get(url, headers={'User-Agent': random()}) response.encoding = 'utf-8' gd = _GetData() gd.feed(response.text) for t in t_7d: if gd.addr in t: t[gd.addr].extend(gd.data_7d) return t_7d
if __name__ == '__main__': import pprint w = WeatherForecast() w.set_city('九龙') pprint.pprint(w.get_today_weather()) # 获得当天 天气预报 pprint.pprint(w.get_7day_weather()) # 获得7天天气预报 pprint.pprint(w.get_15day_weather()) # 获得15天天气预报