于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/
把最后请求的网址提取出来进行测试,即:
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的话应该是:
应该使用
.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()
然后我们右击运行代码,就可以看到当前文件夹多了一个birthday文件夹,所有的图片都下载到文件夹内了,以上就是今天给大家分享的内容,NASA源码获取获取请在后台回复:NASA生日图片。更多精品教程请关注公众号spiderBy,回复“Python教程”,即可获取*智基础+就业班课程。