【问题标题】:Python: How do I solve ConnectionError: HTTPSConnectionPool(host='data.humdata.orghttps', port=443)Python:如何解决 ConnectionError:HTTPSConnectionPool(host='data.humdata.orghttps', port=443)
【发布时间】:2022-01-08 13:39:38
【问题描述】:

我正在尝试从这个site 下载带有国家/地区数据的数据。我成功抓取了页面内容,得到了各个国家的下载链接,尤其是.zip文件的链接。

我收集文件下载链接的代码示例如下:

data = soup.find_all('div', {"class":'hdx-btn-group hdx-btn-group-fixed'})

for item in enumerate(data):
            if '.geojson' in item.get_text() or '.topojson' in item.get_text():
                continue
            elif 'ADM0' in item.get_text() or 'ADM1' in item.get_text() or 'ADM2' in item.get_text() or 'ADM3' in item.get_text():
                a_links = item.find('a', href=True)
                split_link = str(a_links).split('"')
                index_link = 0
                for val,every in enumerate(split_link):
                    if every == ' href=':
                        index_link = val + 1
                
                our_link = split_link[index_link]
                full_link = new_base_url + our_link
                all_new_links[m]['link'].append(full_link)
                all_new_links[m]['country'] = country_name

作为示例,这里是文件下载链接列表:

file_download = ['https://data.humdata.orghttps://github.com/wmgeolab/geoBoundaries/raw/ba7b3ab481359205226ac8712f07326d6a7edb3d/releaseData/gbOpen/ZMB/ADM2/geoBoundaries-ZMB-ADM2-all.zip', 'https://data.humdata.orghttps://github.com/wmgeolab/geoBoundaries/raw/4e9bd60a361c465be0bca5487f4e3d496a27d0be/releaseData/gbOpen/YEM/ADM2/geoBoundaries-YEM-ADM2-all.zip', 'https://data.humdata.orghttps://github.com/wmgeolab/geoBoundaries/raw/eff4a77b014f07e326e04eeb24bc81de2a45f64f/releaseData/gbOpen/WSM/ADM2/geoBoundaries-WSM-ADM2-all.zip', 'https://data.humdata.orghttps://github.com/wmgeolab/geoBoundaries/raw/3a56abbc5fdde21f7dee6ddb9062171da5689b6b/releaseData/gbOpen/VUT/ADM3/geoBoundaries-VUT-ADM3-all.zip','https://data.humdata.orghttps://github.com/wmgeolab/geoBoundaries/raw/f591db4ef2ab61b972fce008c7addd287d46c846/releaseData/gbOpen/TZA/ADM3/geoBoundaries-TZA-ADM3-all.zip', 'https://data.humdata.orghttps://github.com/wmgeolab/geoBoundaries/raw/b62f4ea59d20c9b258718a3c845b8bb12c7458f0/releaseData/gbOpen/UGA/ADM2/geoBoundaries-UGA-ADM2-all.zip']

这是我下载内容文件的代码

z = 1
for i in file_download:
    with open(basename('country'+str(z)+'.zip'), "wb") as f:
        f.write(requests.get(i).content)
        print(f"Item {z} Finished")
z += 1

但是,当我运行上面的代码来下载数据文件(在这种情况下是压缩的)时,我得到了错误:

ConnectionError: HTTPSConnectionPool(host='data.humdata.orghttps', 端口 = 443):最大重试次数超出 url: //github.com/wmgeolab/geoBoundaries/raw/ba7b3ab481359205226ac8712f07326d6a7edb3d/releaseData/gbOpen/ZMB/ADM2/geoBoundaries-ZMB-ADM2-all.zip (由 NewConnectionError(' 的对象:无法建立新连接: [Errno 11001] getaddrinfo 失败'))

我已经尝试了几件事来尝试解决错误,但都没有成功。这些包括添加标题和验证=假

z = 1
for i in file_download:
    with open(basename('country'+str(z)+'.zip'), "wb") as f:
        f.write(requests.get(i, headers=headers, verify=False).content)
        print(f"Item {z} Finished")
z += 1

我该如何解决这个错误?我很乐意为您提供任何帮助。

【问题讨论】:

    标签: python beautifulsoup python-requests


    【解决方案1】:

    简单的错误,请查看您在 file_download 中的 URL,您错误地添加了原始站点地址,例如:'https://data.humdata.orghttps://github.com/wmgeolab/geoBoundaries/raw/ba7b3ab481359205226ac8712f07326d6a7edb3d /releaseData/gbOpen/ZMB/ADM2/geoBoundaries-ZMB-ADM2-all.zip'应该是'https://github.com/wmgeolab/geoBoundaries/raw/ba7b3ab481359205226ac8712f07326d6a7edb3d/releaseData/gbOpen/ZMB/ADM2/geoBoundaries-ZMB- ADM2-all.zip'

    注意,你可以克隆这个 repo,所有这些数据集都在: https://github.com/wmgeolab/geoBoundaries

    【讨论】:

    • 谢谢 G,你真是个天才!我根本看不到这一点,也许是因为我整天都在努力。我本可以克隆存储库,但是,我只需要选择特定文件。
    • 这种感觉我们都非常清楚!大声笑
    【解决方案2】:

    我维护 geoBoundaries,并且还会推荐我们自己的 API,(在我看来 :) ))比 HDX 更容易使用: https://www.geoboundaries.org/api.html

    【讨论】:

    • 感谢您的建议,丹。我会给它一张支票。我有个问题。我发现 HDX 没有所有国家的管理数据,尤其是欧洲和北美国家。我可以从您的 API 中获取所有这些内容吗?而且我对 geojson 文件也很感兴趣。有可能吗?
    猜你喜欢
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2021-10-28
    • 2021-08-30
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    相关资源
    最近更新 更多