0
点赞
收藏
分享

微信扫一扫

利用py爬取生日的那天哈勃望远镜拍到了什么?

于1990年4月发射升空的哈勃太空望远镜迎来了升空30周年纪念。

为此,美国宇航局(NASA)近日在其官网上发起一项活动——“哈勃望远镜在你生日那天看到了什么?”

NASA邀请大家搜索自己生日当天哈勃望远镜所拍摄到的太空,并在社交媒体上分享出来。

1995年4月1日,哈勃望远镜拍到了它最负盛名的照片之一——天鹰星云的“创世之柱”。图中的三个冷气柱,犹如三座高耸的山峰,孕育着恒星的诞生。由于“创世之柱”在流行文化中影响巨大,多年以后,NASA还对它进行了补拍。

2004年2月29日,作为人马光窗掩凌系外行星搜寻计划(Sagittarius Window Eclipsing Extrasolar Planet Search,简称为SWEEPS计划)的一部分,哈勃望远镜拍摄了距离我们2.6万光年之外的群星。

原来,我们每个人都有属于自己的一片星空。那么你想知道自己生日那天,哈勃望远镜拍到了什么?接下来让我们来用爬虫来爬取下看看。

首先让我们输入网址:

​​https://www.nasa.gov/content/goddard/what-did-hubble-see-on-your-birthday/​​

利用py爬取生日的那天哈勃望远镜拍到了什么?_创建目录

把最后请求的网址提取出来进行测试,即:

​​https://imagine.gsfc.nasa.gov/hst_bday/may-20,​​

​​https://imagine.gsfc.nasa.gov/hst_bday/may-21,​​

均可正常的请求的页面,以此类推,地址应该为:

​​https://imagine.gsfc.nasa.gov/hst_bday/(英文月份)-日期。​​

请求页面的图片提取使用bs4的话应该是:

利用py爬取生日的那天哈勃望远镜拍到了什么?_创建目录_02

应该使用

 .addthis_inline_share_toolbox的

data-media 可以提取到拍摄的图片,然后就让我们进入到编码环节。具体代码如下:

import requests
from bs4 import BeautifulSoup
import time
import os
#防止请求超时报错
import urllib3
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)




class Nasa(object):


def __init__(self):
self.base_url = "https://imagine.gsfc.nasa.gov/hst_bday/"
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"}


def send_request(self, url, params={}):
time.sleep(3)
response = requests.get(url, headers=self.headers)
return response.content.decode('utf-8')


def analysis_data(self, data):
# 1.转换类型
soup = BeautifulSoup(data, "lxml")
# 2.获取标签--列表
data_list = soup.select(".addthis_inline_share_toolbox")
#print(data_list[0]['data-media'])
return data_list[0]['data-media']
# 3.将里面的每一行的数据 提取出来


# 写入本地文件


def write_file(self, data,title):
dir_name = "birthday"
isExists = os.path.exists(dir_name)
# 判断结果
if not isExists:
# 如果不存在则创建目录
# 创建目录操作函数
os.makedirs(dir_name)
with open(dir_name+"/"+title+ ".jpg", "wb") as f: # 新建一个jpg文件,用日期命名
f.write(data) # 写入二进制数据
print(title+"保存完成!") # 保存完成!


def start_work(self):
# https://imagine.gsfc.nasa.gov/hst_bday/january-21
the_month = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November", "December"}
Day_31 = {"January", "March", "May", "July", "August", "October", "December"}
Day_30 = {"April", "June", "September", "November"}
for mon in the_month:
if mon in Day_31:
total_number = 32
elif mon in Day_30:
total_number = 31
else:
total_number = 30
#print(mon)
for i in range(1,total_number):
#print(self.base_url+mon+'-'+str(i))
data = self.send_request(self.base_url+mon+'-'+str(i))
#print(data)
img_url=self.analysis_data(data)
res = requests.get(img_url,verify=False).content
self.write_file(res,mon+'-'+str(i))




if __name__ == '__main__':
tool = Nasa()
tool.start_work()




举报

相关推荐

0 条评论