无法使用Python从url链接下载图像

2024-10-01 02:30:35 发布

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

我想从网上下载一个图像,但是不管使用什么方法,我总是得到一个错误。但是,我可以使用这种方法下载其他图像。在

作品-https://mobec.sk/proxy/geo?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng8&TRANSPARENT=true&layers=global%3Abase&tiled=true&STYLES=&WIDTH=512&HEIGHT=512&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A180&BBOX=1934774.0599543825%2C6239707.492975509%2C1937220.044859508%2C6242153.477880634

不起作用-https://mobec.sk/proxy/geo?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&layers=custom%3Avrbovce_elektrina&tiled=true&STYLES=&WIDTH=512&HEIGHT=512&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A180&BBOX=1947003.9844800085%2C6242153.477880634%2C1949449.969385134%2C6244599.46278576

方法1

使用Python的请求和枕头库。在这里,图像应该直接从url下载。在

import requests
from PIL import Image
from io import BytesIO

url = 'https://mobec.sk/proxy/geo?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&layers=custom%3Avrbovce_elektrina&tiled=true&STYLES=&WIDTH=512&HEIGHT=512&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A180&BBOX=1947003.9844800085%2C6242153.477880634%2C1949449.969385134%2C6244599.46278576'

response = requests.get(url)
img = Image.open(BytesIO(response.content))   # error occurs here
img.save('output.png')

我得到以下错误:

^{pr2}$

方法2

使用Python的Selenium库和chromedriver。这里我尝试在web浏览器中显示图像,并使用Selenium库打印整个页面。在

from selenium import webdriver
from PIL import Image
from io import BytesIO

url = 'https://mobec.sk/proxy/geo?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&layers=custom%3Avrbovce_elektrina&tiled=true&STYLES=&WIDTH=512&HEIGHT=512&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A180&BBOX=1947003.9844800085%2C6242153.477880634%2C1949449.969385134%2C6244599.46278576'

chrome = webdriver.Chrome('path/to/chromedriver')
chrome.get(url)

png = chrome.get_screenshot_as_png()
im = Image.open(BytesIO(png))
im.save('output.png')

chrome.quit()

这种方法的问题是,在chromedriver驱动程序打开的Chrome浏览器中没有加载(显示)图像。当手动将链接粘贴到普通(桌面应用)Chrome中时,会显示图像。在

Method 2 - image does not load into chrome


Tags: 方法fromhttps图像importtrueformaturl
3条回答

使用请求,只需将响应内容写入文件:

with open('image-file', 'wb') as fp: 
   fp.write(response.content)

正如@Piotrek所写,问题不在代码中。我想问题出在服务器端。这对我很有效:

  1. 我使用了方法2
  2. 在打开url链接之前,我已经打开了下面的“父”url (https://mobec.sk/vrbovce#base),它使用这些图像来 创建地图
  3. 在下一步中,我在
    中打开了图像的url链接 使用selenium python模块的chrome web浏览器
  4. 之后,我可以拍下照片的截图

这是对我有用的代码:

from selenium import webdriver
from PIL import Image
from io import BytesIO

web_driver = webdriver.Chrome('path/to/chromedriver')
web_driver.get('https://mobec.sk/vrbovce#base')

web_driver.get('https://mobec.sk/proxy/geo?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&FORMAT=image%2Fpng&TRANSPARENT=true&layers=custom%3Avrbovce_elektrina&tiled=true&STYLES=&WIDTH=512&HEIGHT=512&CRS=EPSG%3A3857&FORMAT_OPTIONS=dpi%3A180&BBOX=1947003.9844800085%2C6242153.477880634%2C1949449.969385134%2C6244599.46278576')

png = web_driver.get_screenshot_as_png()
im = Image.open(BytesIO(png))
im.save('output.png')

web_driver.quit()

我在两个链接上测试了这两个方法,结果发现第二个链接有问题:第一个非常好用,无论是用浏览器手动打开还是使用这些方法;第二个不能在浏览器中打开,两个方法都会出错(这两个方法都很好)。在

正如在错误消息-Could not find layer custom:vrbovce_elektrina-中所写,在两种方法和手动粘贴中,浏览器都找不到一个名为vrbovce_elektrina的层。可能是有一个打字错误,或是没有这样的图像/层在这一页。在

代码很好,只是链接不起作用。在

相关问题 更多 >