Python爬取天气信息

简单的练手实例,所以进化一下,用面向对象,和输入一个城市查那个城市的七日信息
Python爬取天气信息
Python爬取天气信息

import sys
import requests
from bs4 import BeautifulSoup
from pypinyin import lazy_pinyin
from requests.exceptions import RequestException
from lxml import etree
import csv

def myInput():
    city = input('请输入你想要查询天气的城市:')
	#city = sys.stdin.readline()
    pinyin_city = lazy_pinyin(city)
    return pinyin_city[0] + pinyin_city[1]

class TianQiSpider:
    """docstring for TianQiSpider"""

    def __init__(self, name):
        self.name = name
        self.url = 'http://www.tianqi.com/' + name + '/'
        self.headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
                          'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
        }

    def get_html(self):
        try:
            response = requests.get(self.url, headers=self.headers)
            if response.status_code == requests.codes.OK:
                return response.text
            else:
                return None
        except RequestException:
            return None

    def get_info(self, html):
        fp = open('D:/一周天气爬取.csv', 'wt', newline='', encoding='UTF-8')
        writer = csv.writer(fp)
        writer.writerow(['日期', '星期几', '天气', '温度区间', '吹啥风'])
        soup = BeautifulSoup(html, 'lxml')
        selector = etree.HTML(html)
        days = soup.select('div.day7 > ul.week > li > b')
        xingqijis = soup.select('div.day7 > ul.week > li > span')
        tianqis = selector.xpath('//div[@class="day7"]/ul[2]/li/text()')
        temp_froms = selector.xpath('//div[@class="zxt_shuju"]/ul/li/b/text()')
        temp_tos = selector.xpath(
            '//div[@class="zxt_shuju"]/ul/li/span/text()')
        winds = selector.xpath('//ul[@class="txt"]/li/text()')
        for day, xingqiji, tianqi, temp_from, temp_to, wind in zip(days, xingqijis, tianqis, temp_froms, temp_tos, winds):
            日期 = day.get_text()
            星期几 = xingqiji.get_text()
            天气 = tianqi
            温度区间 = temp_from + '~' + temp_to
            风 = wind
            writer.writerow([日期, 星期几, 天气, 温度区间,])
        fp.close()

    def run(self):
        html = self.get_html()
        self.get_info(html)

if __name__ == '__main__':
    city = myInput()
    tianqi_spider = TianQiSpider(city)
    tianqi_spider.run()

Result
Python爬取天气信息