15-搜狗天气信息爬取

目的:按照区域对全国各个区域的天气信息进行爬取

结果呈现:屏幕显示爬取完成;相应文件夹的生成

注:机房的空调坏了,真的很冷,暖水捂子根本离不开手。南京真的很冷.......

注:我的学校是南京信息工程大学,应该是全国气象最牛B的学校了啊!虽然我也没学啥气象......但是学校的气象背景这么浓厚,我就爬点气象数据吧,假装自己也搞过气象!~

搜狗视频官网首页:http://tianqi.sogou.com/cityindex

#下面为本实例的爬虫代码,若有问题可以给我留言,或者有更好的解决方法也可以私信我~

import requests
from bs4 import BeautifulSoup
import os
import csv

def get_page(url):
    headers={'user-agent':'Mozilla/5.0'}
    try:
        r=requests.get(url,headers=headers)
        r.raise_for_status()
        r.encoding=r.apparent_encoding
        return r.text
    except Exception as e:
        print(e)

def get_cate(url):
    cate_name=[]
    url_list=[]
    html=get_page(url)
    soup=BeautifulSoup(html,'html.parser')
    dls=soup.find_all('dl',{'class':{'list-col'}})
    for dl in dls:
        cate1=dl('dt')[0].text.strip()
        for a in dl('dd')[0]('a'):
            cate=cate1+'_'+a.text.strip()
            cate_name.append(cate)
            href=a['href']
            t_url=url+href
            url_list.append(t_url)
    return url_list,cate_name

def get_info(url):
    html=get_page(url)
    soup=BeautifulSoup(html,'html.parser')

    div_jr=soup.find('div',{'class':{'c-left'}})
    div1=div_jr('div')[0]
    num=div1.find('span',{'class':{'num'}}).text.strip()  #今日总体气温
    p=div1.find('p',{'class':{'text'}}).text.strip()       #今日天气情况

    div2=div_jr.find('div',{'class':{'row2'}})
    date = div2.find('a', {'class': {'date'}}).text.strip()  #今日日期
    wind=div2.find('span',{'class':{'wind'}}).text.strip()   #今日风况
    hundity=div2.find('span',{'class':{'wind'}}).text.strip()  #今日湿度
    live=div2.find('span',{'class':{'liv-text'}}).text.strip().replace('\n',' ')#空气指数

    div3=div_jr.find('div', {'class': {'row3'}})
    yj=div3.text.strip()         #今日预警
    if yj =='':
        yj='无'
    jr_weather=[num,p,date,wind,hundity,live,yj] #今日天气
    name1=['今日总体气温','今日天气情况','今日日期','今日风况','今日湿度','空气指数','今日预警']

    div_seven=soup.find_all('div',{'class':{'c-right'}})[1]
    ul=div_seven('ul')[0]
    seven_weather=[]
    for li in ul('li'):
        date=li.find('p',{'class':{'date'}}).text.strip() #时间
        text=li.find('p',{'class':{'text'}}).text.strip()  #星期
        des=li.find('p',{'class':{'des'}}).text.strip()  #天气情况
        wind=li.find('p',{'class':{'wind'}}).text.strip()  #风级
        seven_weather.append(date)
        seven_weather.append(text)
        seven_weather.append(des)
        seven_weather.append(wind)
    temp=div_seven.find('div',{'class':{'r-temp'}})
    high=temp['data-high'].split(',')
    low=temp['data-low'].split(',')
    index=0
    name2=[]
    for i in range(len(high)):
        index1=2+i+index
        index2=3+i+index
        seven_weather.insert(index1,high[i])
        seven_weather.insert(index2,low[i])
        index=index+5
        name2.append('日期')
        name2.append('星期')
        name2.append('最高气温')
        name2.append('最低气温')
        name2.append('天气情况')
        name2.append('风级')

    weather=jr_weather+seven_weather
    name=name1+name2
    return weather,name

def save_to_csv(weather,name,cate):
    file=cate.split('_')[0]+'.csv'
    weather.insert(0,cate.split('_')[1])
    name.insert(0,'城市')
    with open(file,'a+',encoding='utf-8',newline="")as csv_file:
        csv_write=csv.writer(csv_file)
        if os.path.getsize(file)==0:
            csv_write.writerow(name)
        csv_write.writerow(weather)
    print('{}-->信息保存成功!'.format(cate))

if __name__ == '__main__':
    start_url='http://tianqi.sogou.com/cityindex'
    url_list, cate_name=get_cate(start_url)
    for i in range(len(url_list)):
        weather, name=get_info(url_list[i])
        save_to_csv(weather,name,cate_name[i])

屏幕显示:【部分】

aff5201f47da8999cdce528db1875548abc.jpg

文件夹显示:【部分】

c6dc094c39538b3077b5abed5e74e29ca0e.jpg

797a06ad808909f9eb4bcd6862009e29350.jpg

哎,看来全国各地大部分区域都很冷啊!那我就坚持坚持吧!等放寒假就好了!到时候回家,我要开着空调!!!暖和暖和!

【PS:我长这么大还没感受过暖气呢,,,,,,觉得自己好low,,,,,,】

今日爬虫完成!

今日鸡汤:当我以为我无法继续走下去时,我强迫自己要继续前进。我的成功是基于我的坚持,并非运气。 ​​​​

加油ヾ(◍°∇°◍)ノ゙

转载于:https://my.oschina.net/pansy0425/blog/2998676

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值