Python:从一个网站拉取.png,输出到另一个网站

Python:从一个网站拉取.png,输出到另一个网站,python,anaconda,analysis,astronomy,Python,Anaconda,Analysis,Astronomy,希望这个问题不要太模糊,或者要求太多。本质上,我是在分析大量光谱,并希望创建一个包含这些光谱的大型网页,而不是查看单个光谱。附件是最终结果的示例 那里的每个光谱都是从一个巨大的图书馆中提取出来的。我已经很久没有编写代码了,所以这仍然是一次学习经历。我已经设法创建了一个网页,并向前拉了一个单一的光谱。但我没有把这两个放在一起。特别是在数十万的规模上。这大概是一个for循环的问题吧? 如果有人能帮忙,那就太棒了,指向某个方向,或者一个模板。这应该很容易,但我正在努力。 另外,我现在的大部分工作都是

希望这个问题不要太模糊,或者要求太多。本质上,我是在分析大量光谱,并希望创建一个包含这些光谱的大型网页,而不是查看单个光谱。附件是最终结果的示例

那里的每个光谱都是从一个巨大的图书馆中提取出来的。我已经很久没有编写代码了,所以这仍然是一次学习经历。我已经设法创建了一个网页,并向前拉了一个单一的光谱。但我没有把这两个放在一起。特别是在数十万的规模上。这大概是一个for循环的问题吧? 如果有人能帮忙,那就太棒了,指向某个方向,或者一个模板。这应该很容易,但我正在努力。
另外,我现在的大部分工作都是在anaconda python中进行的

毫不奇怪,你对这个项目几乎一无所知。它需要结合Python、HTML和CSS

“每个光谱都是从一个巨大的库中提取出来的”-在这个回答中,我假设您已经将感兴趣的光谱提取到本地目录中,并希望在本地提供的网页中查看这些光谱。我还要假设所有的png文件都是相同大小的

如果这是正确的,那么您需要创建一个简单的html文件,该文件引用所有png文件,并将它们放在一个简单的表中。要做到这一点,代码需要将图像文件放入目录中,打开一个名为“index.html”的输出文件(名称很重要),使用glob获取光谱图像的所有名称,并在名称上循环写出html 对于页面。创建文件后,可以使用命令行命令在本地为其提供服务

    python -m http.server 8000
然后将浏览器指向
http://localhost:8000

下面是一个示例实现

    from glob import glob
    import os

    def spectra_imgs(spectra_dir, sp_format):
        '''Return an iterable with names of all the files in the spectra_dir
        that match the name format sp_format.'''
        for gl_name in glob(os.path.join(spectra_dir, sp_format)):
            yield os.path.basename(gl_name)

    def add_img(sp_img, side, outfile):
        ''' Add a table item to existing table.
            sp_img is the filename of the image
            side is "left" or "right"
            outfile is an open file handle
            Returns None
        '''
        if side == 'left':
            outfile.write('<tr><td class="left_img"><img src="{0}" alt={0}></td>\n"'.format(sp_img))
        elif side == 'right':
            outfile.write('<td class="right_img"><img src="{0}" alt={0}></td></tr>\n"'.format(sp_img))
        else:
            raise ValueError("Side must be either left or right, not {0}".format(side))

    def sides():
        ''' Return an iterator that supplies an infinite sequence of "left" and "right".'''
        while True:
            yield "left"
            yield "right"

    def write_prefix(outfile):
        outfile.write(
        '<!DOCTYPE html>\n'
        '<html class="spectra_page" lang="en">\n'
        '<head>\n'
        '<meta charset="UTF-8"/>\n'
        '<title>Spectra Comparison Page</title>\n'
        '<style>\n'
        'table { width: 100%; }\n'
        '#left_img { align-items: center }\n'
        '#right_img { align-items: center }\n'
        'img { height:500px; width:500px }\n' # change to whatever size you want the images displayed at
        '</style>\n'
        '</head>\n'
        '<body>\n')


    def write_suffix(outfile):
        outfile.write(
        '</table>\n'
        '</body>\n'
        '</html>\n'
        )

    def write_spectra_page(spectra_dir):
        ''' Write an index.html file with all the spectra images shown. '''
        with open(os.join(spectra_dir, "index.html")) as outfile:
            write_prefix(outfile)
            for side, sp_img in zip(sides, spectra_imgs(spectra_dir,'sp*.png'):
                add_img(sp_img, side, outfile)
            if side == "left":
                # need to close the table row
                outfile.write('</tr>\n')
            write_suffix(outfile)
从全局导入全局
导入操作系统
def光谱imgs(光谱目录,sp格式):
''返回一个iterable,其中包含spectra_dir中所有文件的名称
与名称格式sp_格式匹配。“”
对于glob中的gl_名称(os.path.join(spectra_dir,sp_格式)):
生成os.path.basename(gl_名称)
def添加img(sp img、侧面、输出文件):
''将表项添加到现有表中。
sp_img是图像的文件名
侧面是“左”或“右”
outfile是一个打开的文件句柄
不返回
'''
如果边==“左”:
outfile.write('\n'.格式(sp\U img))
elif side==‘右’:
outfile.write('\n'.格式(sp\U img))
其他:
raise VALUERROR(“边必须是左或右,而不是{0}”。格式(边))
def sides():
''返回一个迭代器,该迭代器提供“左”和“右”的无限序列。''
尽管如此:
“左”倾
让出“权利”
def write_前缀(输出文件):
outfile.write(
“\n”
“\n”
“\n”
“\n”
'光谱比较页\n'
“\n”
'表{宽度:100%;}\n'
“#左_img{align items:center}\n”
“#右_img{align items:center}\n”
“img{height:500px;width:500px}\n”#更改为您希望图像显示的大小
“\n”
“\n”
“\n”)
def write_后缀(输出文件):
outfile.write(
“\n”
“\n”
“\n”
)
def写入光谱页面(光谱目录):
''编写一个index.html文件,其中包含所有显示的光谱图像。''
以open(os.join(spectras_dir,“index.html”)作为输出文件:
写入前缀(输出文件)
对于侧面,拉链中的sp_img(侧面,光谱(光谱方向,'sp*.png'):
添加img(sp img、侧面、外文件)
如果边==“左”:
#需要关闭表行吗
outfile.write(“\n”)
写入后缀(输出文件)

这是附件,很抱歉。它们都是从这里提取的,而且,所有图像的大小都不同CSS中的
img
标记将使图像以相同的大小显示,但可能会拉伸一些以使其适合。您可以修改
标记,而不是从本地存储加载图像每次打开页面时,浏览器都会通过internet加载它们。这可能会很慢。只有在计算机上没有足够的存储空间时,我才会选择这种方法。