python 抓取城市7日天气

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")


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值