IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> python爬虫绘制具体某一日的星图 -> 正文阅读

[人工智能]python爬虫绘制具体某一日的星图

python爬虫绘制具体某一日的星图

老妈最近因为某些事情去档案处查了自己的资料,发现真实出生时间和身份证上的不一样。刚好最近临近她的生日,想自己做一些礼物送给她,就在网上查了一下她出生日的星图,准备做一个她出生那天的星图变化的小视频送给她。

实践

在网上找了星图的网站,发现这个网站 https://www.heavens-above.com/能查到每日的星图,估计是根据时间计算了轨道之类的,天文方面我一窍不通。下面是实现步骤。

  1. 星图
    heavensabove这个网站有实时交互星图。但是具体到过去的某一日的星图我选择的是它的skychart,也就是“天文”目录下的“星图”。星图的几个选项就是年月日,左上角有可以更新地点的选项。
  2. python爬虫
    (1)视频准备用长度为100s的生日歌,为了不出现卡顿,所以至少得有1000张星图的照片。生成星图后复制图片地址到新标签页,右键可以保存,png格式,url里面出现ashx。去百度搜了一下ashx,是一般处理程序。html、ashx和web界面(aspx) [1] 这篇文章基本上解决了我的问题。
    (2)使用python的request库进行爬虫,会发现返回的text是乱码,后来乱研究了一通才发现返回的text里有一个"\PNG"的头,验证了一下数据是爬对了。
    (3)requests里面的url解释一下:size是大小;ecl和cb是黄道和星座分界是否打开,默认是打开的,这里调为0,个人审美;time指时间,是一个较大的数字,增加1就是增加了1天,需要哪天的星图就用网页更新,打开图片地址看看url获得时间上下限就可以了;lat、lng、alt分别是观测点的纬度、经度、高度,默认北纬东经为正,南纬西经为负。
import requests
r = requests.get('https://www.heavens-above.com/wholeskychart.ashx?lat=40&lng=115&alt=100&tz=ChST&size=800&SL=1&SN=1&BW=0&ecl=0&cb=0&time='+str(num))
  1. 处理获得的图片
    (1)用python内置的opencv库cv2处理图片,参考自文章Python 使用字节流读取图片并转换成图片格式显示[2]。网上查到opencv默认的读取是BGR,所以代码里有一句RGB2BGR。
    ( 2)在图片上加上时间,使用cv2的putText[3]函数,写入硬盘即可。参数查阅opencv document
    在这里插入图片描述
import cv2
import numpy as np
from PIL import Image
from io import BytesIO

if r.status_code == 200:
	r_byte = r.content
	bytes_stream = Image.open(bytes_stream)
	img = Image.open(bytes_stream)
	img = cv2.cvtColor(np.asarray(img,cv2.COLOR_RGB2BGR)
	cv2.putText(img,"time",(650,50),cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,255,255),1,cv2.LINE_AA,False)
    cv2.imwrite('../../test/'+str(i)+'.png',img)
  1. 生成视频
    这一步我用的是pr,就按照逐帧动画来就可以了。用ffmpeg应该也可以,未尝试,估计会快一些。
    pr的批量导入需要按照名字顺序排列图片,所以在写入硬盘时命名最好是规范的相同数位的格式,否则会出现1.png 10.png 100.png这样的导入顺序。
    在这里插入图片描述

完整代码

import requests
import cv2
from io import BytesIO
from PIL import Image
import numpy as np

num = 40500.666 #time
gap = round(1/1440,5)
for i in range(0,1440):
    num = num + 0.00069 #num+gap
    r = requests.get('https://www.heavens-above.com/wholeskychart.ashx?lat=40&lng=130&alt=100&size=800&SL=1&SN=1&BW=0&ecl=0&cb=0&time='+str(num))
    if r.status_code == 200:
        r_byte = r.content
        bytes_stream = BytesIO(r_byte)
        img = Image.open(bytes_stream)
        img = cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)
        #cv2.imshow("img",img)
        #cv2.waitKey(0)
        hh = i//60
        mm = i%60
        cv2.putText(img,"10.3 "+str(hh)+":"+str(mm),(650,50),cv2.FONT_HERSHEY_SIMPLEX,0.5,(255,255,255),1,cv2.LINE_AA,False)
        cv2.imwrite('../test/'+str(i)+'.png',img)
    else:
        print("pic " +str(i)+ " get no result")

视频样例

【python爬虫|PR】星轨示例

尚未解决的问题

1.用python访问heavensabove没有生成中文的星图,试了试在url里加lan=ch没成功
2.如果python能一键生成逐帧视频并压制配乐就更好了,一份代码解决所有问题

最后

欢迎在此进行技术讨论。拒绝任何未经授权的转载。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:15:46  更:2021-09-29 10:19:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 12:30:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码