爬取solarmonitor资料

业务需要所以爬取了这网站,这里分享些经验,爬取的网站是https://solarmonitor.org/
先说一下难点,

  1. url后面是通过日期进行翻页,但是如何输出循环式的日历式的格式呢
  2. 需要计算耀斑爆发次数,而不是爆发的等级

针对第一个难点,下面提供解决办法,

import datetime
day_list = []
begin = datetime.date(2013,1,1) #初始日期
end = datetime.date(2014,1,1) #目标日期
for i in range((end-begin).days+1):
    day = begin+datetime.timedelta(days=i)
    day_list.append(str(day.strftime('%Y%m%d')))  #进行格式转换
print(day_list)

第二个难点如何计算耀斑爆发次数,这边就不提供了,思路需要转变下就出来了。

下面列出源代码

import datetime,requests,csv
from bs4 import BeautifulSoup
#日期循环
day_list=[]
begin = datetime.date(2013,1,1)
end = datetime.date(2014,1,1)
for i in range((end-begin).days+1):
    day = begin+datetime.timedelta(days=i)
    day_list.append(str(day.strftime('%Y%m%d')))#进行格式转换
print(day_list)



headers={
'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'
}


#文件写入
csv_file = open('a2013.csv','w',newline='')
write = csv.writer(csv_file)
for q in day_list:
    url = 'https://solarmonitor.org/index.php?date='+ q
    res = requests.get(url,headers=headers)
    bs = BeautifulSoup(res.text,'html.parser')
    noaa=bs.find_all('tr',class_='noaaresults')
    #print('爬完'+q +"日") #用于查看爬完的日期
    for i in noaa:
        f = []
        number = i.find(id='noaa_number').text
        position = i.find(id='position').text
        positions = position.replace('S','+').replace('N','-')   #需求要把南北换成 +\-
        flares = i.find(id='events').text
        flares = 已打码 #计算耀斑次数
        # print(number,positions[4:7],flares)
        write.writerow([number,positions[4:7],flares])

因为爬取的周期很长,所以通过异步多线程解决是最好也是最快的,爬取5年大概130秒左右,但我提供的这段代码是单线程的,所以效率比较低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值