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