1、首先打开气象网址,http://www.weather.com.cn/weather/101190101.shtml,打开开发者工具,
1.1可以看到7日的天气所在位置:
1.2 具体每日的天气属性 ,在li class中,
2、使用 python库函数获取网页信息
url = 'http://www.weather.com.cn/weather/101190101.shtml'
webpage = req.urlopen(url) # 根据超链访问链接的网页
data = webpage.read() # 读取超链网页数据
data = data.decode('utf-8') # byte类型解码为字符串
#这里data获取的是整个网页信息,如下需要根据1.1的格式,截取7日天气信息,截取关键词<ul class="t clearfix">。具体findall用法可以自查。
#print(data) ;
table = re.findall(r'<ul class="t clearfix">(.*?)</ul>', data, re.S)
print(table)
3、对网页信息按照1.2格式,进行提取。具体分割关键词和语法有很多,比如find,rfind应该都可以。建议对照开发者工具进行提取,直观易区分。
提取时间,以h1分割
date = re.findall(r'<h1.*?>(.*?)</h1>', row, re.S)
print("date is",date[0])
items.append(date[0])
提取weather,以ptitle分割
wea = re.findall(r'<ptitle.*?>(.*?)</p>', row, re.S)
print("wea is",wea[0])
items.append(wea[0])
提取温度,
temp1 = re.findall(r'<span>(.*?)</span>', row, re.S)
#print("temp1 is",temp1)
temp2 = re.findall(r'<i>(.*?)</i>', row, re.S)
4、将提取信息进行汇总
本次提取有4列信息,#date|weather|temp|wind , 4 columns。将4列信息,append到一个数组,items。
然后每个items,代表1天的天气信息。再把7日的天气,append到 weatherlist.append(items)
所有信息拿到后,就按照4列格式,写成csv文件,
df=pd.DataFrame(weatherlist,index=list(range(1,len(weatherlist)+1)),columns=['日期', '天气', '温度','风力'])
df.to_csv("2.csv",encoding='utf_8_sig')
python内容如下:
import urllib.request as req
import re
import pandas as pd
import os
if os.path.isfile('2.csv'):
os.remove("2.csv")
url = 'http://www.weather.com.cn/weather/101190101.shtml'
webpage = req.urlopen(url) # 根据超链访问链接的网页
data = webpage.read() # 读取超链网页数据
data = data.decode('utf-8') # byte类型解码为字符串
#print(data)
table = re.findall(r'<ul class="t clearfix">(.*?)</ul>', data, re.S)
print(table)
firsttable = table[0]
def step3():
print("start step3")
score = []
# 1.按tr标签对获取表格中所有行,保存在列表rows中:
rows = re.findall(r'<li(.*?)</li>', firsttable, re.S)
print("\n print rows below:")
print(rows[0])
# 2.迭代rows中的所有元素,获取每一行的td标签内的数据,并把数据组成item列表,将每一个item添加到scorelist列表:
weatherlist = []
for row in rows:
items = []
date = re.findall(r'<h1.*?>(.*?)</h1>', row, re.S)
print("date is",date[0])
items.append(date[0])
wea = re.findall(r'<p title.*?>(.*?)</p>', row, re.S)
print("wea is",wea[0])
items.append(wea[0])
temp1 = re.findall(r'<span>(.*?)</span>', row, re.S)
#print("temp1 is",temp1)
temp2 = re.findall(r'<i>(.*?)</i>', row, re.S)
#print("temp2 is",temp2[0])
temp_t=temp1[0]+'/'+temp2[0]
print("temp is",temp_t)
items.append(temp_t)
wind = re.findall(r'<span title=(.*?)class', row, re.S)
#print("wind is",wind)
wind_t=wind[0]+'/'+wind[1]+temp2[1]
#print("wind is",wind_t)
wind_t=wind_t.replace('"','')
print("wind is",wind_t)
items.append(wind_t)
print("items is",items)
#date|weather|temp|wind , 4 columns
#for td in tds:
# rightindex = td.find('</span>') # 返回-1表示没有找到
# leftindex = td[:rightindex].rfind('>')
# items.append(td[leftindex+1:rightindex])
weatherlist.append(items)
df=pd.DataFrame(weatherlist,index=list(range(1,len(weatherlist)+1)),columns=['日期', '天气', '温度','风力'])
df.to_csv("2.csv",encoding='utf_8_sig')
return weatherlist
def test():
#time.sleep(2)
print("test is running!")
print("get result")
print(step3())
print("end result")