从Sky Server数据库下载图像时出错?

2024-04-27 14:05:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在收集斯隆数字天空调查的图像,并尝试将这些图像本地下载到一个文件夹中。这是我目前掌握的代码:

import urllib.request
import pandas as pd

def get_images(df_converted):
    objid_list = df_converted['OBJID'].tolist()
    ra_list = df_converted['RA_DECIMAL'].tolist()
    dec_list = df_converted['DEC_DECIMAL'].tolist()

    for objid, ra, dec in zip(objid_list, ra_list, dec_list):
        # Save the image using the 'OBJID' as .jpg image
        filename = str(objid) + '.jpg'
        # Replace the ra and dec coordinates in the URL, downloading in 512 x 512 resolution
        image_url = "http://skyservice.pha.jhu.edu/DR7/ImgCutout/getjpeg.aspx?ra=" + str(ra) + "&dec=" + str(dec) + "&scale=0.40&width=512&height=512&opt="
        urllib.request.urlretrieve(image_url, "images/" + filename)

这段代码运行良好,我可以下载大约600张图片,但这些并不是我需要的全部图片。在某些时候,我遇到了以下错误:

shilpakancharla@Shilpas-MBP galaxy-classification % python3 sdss_image_capture.py
Traceback (most recent call last):
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1317, in do_open
    encode_chunked=req.has_header('Transfer-encoding'))
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1229, in request
    self._send_request(method, url, body, headers, encode_chunked)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1275, in _send_request
    self.endheaders(body, encode_chunked=encode_chunked)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1224, in endheaders
    self._send_output(message_body, encode_chunked=encode_chunked)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 1016, in _send_output
    self.send(msg)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 956, in send
    self.connect()
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/http/client.py", line 928, in connect
    (self.host,self.port), self.timeout, self.source_address)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/socket.py", line 727, in create_connection
    raise err
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/socket.py", line 716, in create_connection
    sock.connect(sa)
TimeoutError: [Errno 60] Operation timed out

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "sdss_image_capture.py", line 87, in <module>
    get_images(new_df)
  File "sdss_image_capture.py", line 82, in get_images
    urllib.request.urlretrieve(image_url, "images/" + filename)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 247, in urlretrieve
    with contextlib.closing(urlopen(url, data)) as fp:
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 222, in urlopen
    return opener.open(url, data, timeout)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 525, in open
    response = self._open(req, data)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 543, in _open
    '_open', req)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 503, in _call_chain
    result = func(*args)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1345, in http_open
    return self.do_open(http.client.HTTPConnection, req)
  File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.7/lib/python3.7/urllib/request.py", line 1319, in do_open
    raise URLError(err)
urllib.error.URLError: <urlopen error [Errno 60] Operation timed out>

我在理解错误的Transfer-encoding部分以及发生错误的原因方面遇到了一些困难,我如何编写方法以使其能够处理此问题


1条回答
网友
1楼 · 发布于 2024-04-27 14:05:05

我通过以下方式获得了解决方案:

pip install ssl

然后将以下行添加到我的代码中:

import sslssl._create_default_https_context = ssl._create_unverified_context在我的驱动程序代码中

相关问题 更多 >