气数据对于许多应用领域都非常重要,如旅游规划、农业生产、气象预测等。使用Python爬虫可以方便地从各种天气网站上获取实时的天气数据。本文将介绍如何使用Python爬虫实战来爬取天气数据,帮助您在自己的项目中快速获取天气信息。
1.确定目标网站和URL
首先,我们需要确定一个可靠的天气网站作为数据源。一些常见的天气网站包括中国气象局、Weather.com、AccuWeather等。选择一个合适的网站后,我们可以通过查看网页的源代码来获取天气数据的URL。
2.发起HTTP请求
使用Python的requests库,我们可以方便地发起HTTP请求。根据目标网站的要求,构造一个GET请求,并设置好请求头,包括User-Agent等信息。通过发送HTTP请求,我们可以获取到服务器返回的HTML页面。
3.解析HTML页面
使用Python的第三方库如BeautifulSoup或内置库如re,我们可以解析HTML页面,提取出我们需要的天气数据。通过分析HTML标签的结构和属性,我们可以定位到包含天气数据的标签,并从中提取出具体的天气信息。
4.数据处理和存储
获取到天气数据后,我们可以对其进行进一步的处理和分析。例如,可以提取出温度、湿度、风速等具体的指标,并进行数据可视化或存储到数据库中。这样,我们就可以根据需求来使用和展示这些天气数据。
5.定期更新和自动化
由于天气数据是实时变化的,我们可以设置定期运行爬虫程序,以获取最新的天气信息。通过编写自动化脚本,我们可以实现定时运行爬虫程序,并将更新后的天气数据发送给相关人员或应用系统。
使用Python爬虫实战爬取天气数据可以让我们快速获取实时的天气信息。通过选择合适的天气网站,发起HTTP请求并解析HTML页面,我们可以方便地获取到所需的天气数据,并进行进一步的处理和存储。希望本文能够帮助您掌握Python爬虫技术,实现天气数据的自动获取和应用。
下面是代码分享
# # -*- coding: UTF-8 -*-
# import requests
# import json
# lat = '34.036080833'
# lng = '108.759264000'
# lng = str(lng)
# lat = str(lat)
# ak = '你的百度地图AK'
# output = 'json'
# list = {'location':lat +','+ lng,'ak':ak,'output':output}
# res = requests.get(url='http://api.map.baidu.com/geocoder/v2/', params=list)
# result = res.json()
# print(result)
# city = result['result']['addressComponent']['city']
# print('省区:'+city)
# district = result['result']['addressComponent']['district']
# print('县区:'+ district)
# print("-------------------------------")
# tianqi = requests.get(url="http://wthrcdn.etouch.cn/weather_mini?city="+district)
# data = tianqi.json()
# print(data)
# high =data['data']['wendu']
# print('温度:'+high +'℃')
# -*- coding: UTF-8 -*-
import requests
import csv
import random
import time
import socket
import pandas as pd
from bs4 import BeautifulSoup
import urllib
import re
import random
def getHTMLtext(city_code):
# http://www.weather.com.cn/data/cityinfo/101110101.html
# http://www.weather.com.cn/weather/101110101.shtml
# url = f'http://www.weather.com.cn/data/cityinfo/{city_code}.html'
url = f'http://www.weather.com.cn/weather/{city_code}.shtml'
response = urllib.request.urlopen(url)
content = response.read().decode('utf-8')
#print("网页内容",content)
return content
# 查询城市代码
def search_city_code(city_name):
city_code = '-1'
df = pd.read_json('city_code.json')
for row in df.values:
row_data = row[0]
city_data = row_data['市']
for cd in city_data:
# print(cd['市名'], cd['编码'])
if (city_name == cd['市名'] or cd['市名'] in city_name):
city_code = cd['编码']
break
print("城市名字",city_name,"城市代码",city_code)
return city_code
def get_data(html_text):
final = []
bs = BeautifulSoup(html_text, "html.parser")# 创建BeautifulSoup对象
body = bs.body # 获取body部分
data = body.find('div', {'id':'7d'}) # 找到id=7d的div
ul = data.find('ul', {'class':'t clearfix'})
li = ul.find_all('li')
# print li
for day in li: # 对每个li标签中的内容进行遍历
temp = []
# 这里有问题
date = day.find('h1').string # 找到日期
temp.append(date)
inf = day.find_all('p') # 找到li标签中所有的p标签
temp.append(inf[0].string) # 将第一个p标签中的内容(天气状况)加入到temp中
if inf[1].find('span') is None:
temperature_higgest = None # 天气预报可能没有当天的最高气温(到了傍晚,就是这样),需要加一个判断,来输出最低气温
else:
temperature_higgest = inf[1].find('span').string # 找到最高气温
# temperature_higgest = temperature_higgest.replace('℃', '') # 到了晚上网站内容会有变动,去掉这个符号
temperature_lowest = inf[1].find('i').string # 找到最低温度
# temperature_lowest = temperature_lowest.replace('℃', '')
temp.append(temperature_higgest)
temp.append(temperature_lowest)
final.append(temp)
print("天气结果",final)
return final
'''
if __name__ == '__main__':
city_name_list = ['重庆'] # 获取以上五个城市天气数据
#for cn in city_name_list:
city_code = search_city_code(city_name_list[0])
html_str = getHTMLtext(city_code)
result = get_data(html_str) # 获得1-7天和当天的数据
'''
因篇幅问题不能全部显示,请点此查看更多更全内容