#.抓取天气
import requests
from bs4 import BeautifulSoup
from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font, colors, Alignment
def getHTMLText(url, timeout=30):
try:
r = requests.get(url, timeout=30)
r.raise_for_status()
r.encoding = r.apparent_encoding
return r.text
except:
return '产生异常'
def get_data(html):
final_list = []
soup = BeautifulSoup(html, 'html.parser')
body = soup.body
data = body.find('div', {'id': '7d'})
ul = data.find('ul')
lis = ul.find_all('li')
for day in lis:
temp_list = []
date = day.find('h1').string
temp_list.append(date)
info = day.find_all('p')
temp_list.append(info[0].string)
if info[1].find('span') is None:
temperature_highest = ' '
else:
temperature_highest = info[1].find('span').string
temperature_highest = temperature_highest.replace('℃', ' ')
if info[1].find('i') is None:
temperature_lowest = ' '
else:
temperature_lowest = info[1].find('i').string
temperature_lowest = temperature_lowest.replace('℃', ' ')
temp_list.append(temperature_highest)
temp_list.append(temperature_lowest)
wind_scale = info[2].find('i').string
temp_list.append(wind_scale)
final_list.append(temp_list)
return final_list
def print_data(final_list, num):
print("{:^10}\t{:^10}\t{:^10}\t{:^10}\t{:^10}".format('日期', '天气', '最高温度', '最低温度', '风级'))
for i in range(num):
final = final_list[i]
print("{:^10}\t{:^10}\t{:^10}\t{:^10}\t{:^10}".format(final[0], final[1], final[2], final[3], final[4]))
def write_xlsx(input_list):
wb = Workbook()
ws = wb.create_sheet('天气预报')
ws.append(['日期', '天气', '最高温度', '最低温度', '风级'])
for x in input_list:
ws.append(x)
ws.column_dimensions['A'].width = 20
ws.column_dimensions['B'].width = 20
ws.column_dimensions['E'].width = 15
del wb['Sheet']
wb.save('天气表.xlsx')
def main():
url = 'http://www.weather.com.cn/weather/101210101.shtml'
html = getHTMLText(url)
final_list = get_data(html)
print_data(final_list, 7)
write_xlsx(final_list)
main()